有一個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函數也不同。