是因为 ES6 新增了块作用域的存在。
对于 let
来说,每次 for
循环内部都是一个新的块,下一次循环块里访问的是 i
就是自己这个块里的,跟上一次循环没关系。
用 ES6 之前的函数作用域来模拟块作用域的话,就类似于:
var i;
for(i = 0; i < el.length; ++i) {
function func(tmp) {
el[tmp].addEventListener('click', function() {
console.log(tmp);
});
}
func(i);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…