有一個ul,ul里面有幾個li,如果需要點擊li打印出此li對應的索引號該怎么做呢?
最開始的想法是:
<ul>
<li>春</li>
<li>夏</li>
<li>秋</li>
<li>冬</li>
</ul>
<script type="text/javascript">
var lis=document.getElementsByTagName("li");
for (var i = 0; i < lis.length; i++) {
lis[i].onclick=function(){
console.log(i);
}
};
</script>
結果發現點擊春、夏、秋、冬打印出來的都是4。
原因分析:上面代碼中,變量i是var聲明的,在全局范圍內都有效。所以每一次循環,新的i值都會覆蓋舊值,導致最后輸出的是最后一輪的i的值。
修改代碼如下:
for(var i=0;i<li.length;i++){
(function(x){
li[x].onclick=function(){
console.log(x);
}
})(i);
}
如此利用閉包發現可以達到需求,i作為參數傳遞給x,i不同,選定的li不同,從而綁定的click函數也不同。
