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

关于块级作用域的问题

关于块级作用域的问题

缥缈止盈 2018-08-02 18:54:53
var box = document.querySelector('.box');    for (var i = 0; i < 10; i++) {        var li = document.createElement('li');         li.innerHTML = i;         box.appendChild(li);         li.addEventListener('click',function(){            console.log(i);         })     }这段代码点击新生产的li标签全是10,高程书中说,闭包只能取得包含函数中任何变量的最后一个值,我理解了很长时间,不明白原委。第二个问题是,为什么将i的类型设置为let就是点击显示正常,我知道let是块级作用域的概念,那为何块级作用域就能显示正常呢?有些被绕里了,请大神解释一下,感激不尽了。
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

1,这其实是块级作用域的问题,并没有涉及到闭包。
2,产生原因在于var与let使用的作用域不同。
var 变量的作用域是全局,而let 是局部的块作用域即for循环内,
全局变量唯一性,var 声明的变量i在循环中被不断覆盖最终只是唯一的10,因此在外部调用中无论li的哪一个,最终都是10。
而let是局部的作用域,并不会被覆盖。

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

添加回答

举报

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