<div class="nav">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</div>JS代码一:var lis = document.querySelectorAll("li");
for (var i = 0; i < lis.length; i++) {
lis[i].addEventListener('click', function() {
alert(i)
})
} //每一个都是弹出5JS代码二:var lis = document.querySelectorAll("li");
for (let i = 0; i < lis.length; i++) {
lis[i].addEventListener('click', function() {
alert(i)
})
} //将var改成let后,就能正确弹出每一个li的索引了JS代码三:var lis = document.querySelectorAll("li");
for (var i = 0; i < lis.length; i++) {
(function(i){
lis[i].addEventListener('click', function() {
alert(i)
})
})(i)
} //写在自执行函数里,也能正确弹出每一个li的索引谁给我讲讲这是为什么
1 回答
已采纳
cxxyjsj
TA贡献119条经验 获得超22个赞
这个题目主要考察js作用域的问题。
代码一和代码二考察var和let的区别,可以自行百度下。
代码三是一个立即执行函数,把循环变量当做参数传递进去,通过匿名方法修改了变量的作用域。
添加回答
举报
0/150
提交
取消