有只小跳蛙
2018-09-04 13:26:36
在看js閉包這一塊兒,有一個(gè)地方難以理解。代碼如下。為什么打印出來(lái)的始終是6呢<script>
window.onload = function(){ var ul =document.getElementsByTagName('ul')[0];
var li = ul.getElementsByTagName('li'); for(var i=0;i<li.length;i++){
li[i].onclick = function(){ console.log(i);
}
}
}</script><body><ul>
<li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul></body>
1 回答

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
老有人問(wèn)這種文問(wèn)題,當(dāng)然我剛學(xué)的時(shí)候,也來(lái)社區(qū)問(wèn)過(guò)這個(gè)問(wèn)題。簡(jiǎn)單說(shuō)下,你那個(gè)綁定的點(diǎn)擊事件函數(shù),是當(dāng)你點(diǎn)擊了之后才會(huì)出觸發(fā),進(jìn)入那個(gè)函數(shù)執(zhí)行相應(yīng)的代碼的,所以一開(kāi)始那個(gè) i=1,2,3... 根本就沒(méi)到那個(gè)函數(shù)里面去,你只是每次都給li 綁定了個(gè) function(){console.log(i)};這個(gè)i并沒(méi)有值。然后等你 去點(diǎn)擊觸發(fā),這個(gè)時(shí)候i已經(jīng)循環(huán)了一遍了,最后i就變成了 6,最后 進(jìn)去執(zhí)行那個(gè)函數(shù) 的時(shí)候 打印的那個(gè)i 當(dāng)然就是 6咯。
添加回答
舉報(bào)
0/150
提交
取消