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是局部的作用域,并不会被覆盖。
添加回答
举报
0/150
提交
取消