为了账号安全,请及时绑定邮箱和手机立即绑定

这是闭包问题么,谁给我解答一下!

这是闭包问题么,谁给我解答一下!

淡雅的默 2018-04-23 17:45:52
<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的区别,可以自行百度下。

代码三是一个立即执行函数,把循环变量当做参数传递进去,通过匿名方法修改了变量的作用域。

查看完整回答
反对 回复 2018-04-23
  • 1 回答
  • 0 关注
  • 1089 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信