- 使用let声明的变量每个块级之间是相互独立的不同变量
- 每次
for循环迭代时,用let声明的变量i都是彼此独立的,并且在每次迭代中是不同的变量
- 每次
- child::ES5实现块级作用域
实例
为了更好地理解这个机制,下面是一个简单的示例:
for (let i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}在这个示例中,由于使用了 let,每次迭代中的 i 都是独立的,因此输出结果将是:
0
1
2与此相反,如果使用 var,则会得到不同的结果,因为 var 具有函数作用域(或全局作用域),而不是块作用域:
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}在这种情况下,输出结果将是:
3
3
3这是因为在所有定时器回调函数执行时,i 的值已经变成了 3,即循环结束后的值。
综合示例
for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i)
}, i * 1000)
}- 将会在 第0秒到第4秒每隔一秒输出5个5
- 解释:
- 每次循环, i为不同的值, 把值传给setTimeout的第二个参数
- 执行settimeout的回调函数时, 通过i这个变量获取值的时候, 因为每次循环的i都是统一个地址, 所以值是最好的5