KokoTa
2016-01-17 23:16:32
以下代碼可以獲得正確的循環(huán)時i的值(0,1,2,3):document.body.onclick=function(){ for(var i=0;i<4;i++){ !function(i){ var o = document.getElementById(i); o.onmouseover=function(){ alert(i); } alert(i); }(i); }但是稍微改動一下后,i的值為最終值(4,4,4,4):document.body.onclick=function(){ for(var i=0;i<4;i++){ var o = document.getElementById(i); o.onmouseover=function(){ alert(i); } alert(i); }請問一下這是為什么??糾結(jié)了好久??!
3 回答
已采納

Lyong
TA貢獻23條經(jīng)驗 獲得超16個贊
第一次:for循環(huán)嵌套 ?自動函數(shù), i從0-3 ?執(zhí)行四次,每次執(zhí)行,自執(zhí)行函數(shù)也會跟著執(zhí)行,也就會按照i值的不同,給不同的節(jié)點,綁定不同的事件,所有最后當你出發(fā)不同的節(jié)點的時候,可以跳出不同的值。
第二次:直接for循環(huán),最后i = 4,for循環(huán)結(jié)束,var o = document.getElementById(i); ?這個執(zhí)行了四次,所有每個節(jié)點都綁定了時間,但i的值卻沒有傳入onmouseover事件作用域,所有最后出發(fā),回往上查找i的值,找到的都是i = 4;

賣火柴的小舒
TA貢獻42條經(jīng)驗 獲得超16個贊
后面那段會把循環(huán)體的語句循環(huán)四遍之后,再把變量i的值轉(zhuǎn)換成常量。這時i的值已經(jīng)是4了,也就是說你給ID為4的元素綁定了四次事件。而函數(shù)每次調(diào)用哪里,每次執(zhí)行一次就馬上調(diào)用一次,并且把當前的i傳進去。所以就是0,1,2,3。大概的道理就是這樣,感覺自己道行有點不夠,所以解釋不咋清楚。一定等大神的解釋吧!
添加回答
舉報
0/150
提交
取消