var 案例
for (var i = 0; i < 10; i++) {
setTimeout(() => {
console.log(i)
}, 100)
}
结果: 10 个 10
原因: 因为 i 是全局变量,最后访问的都是全局变量 i,而每次循环改变 i 的值就是改变后的全局变量的值,故而输出值为10
let 案例
for (let i = 0; i < 10; i++) {
setTimeout(() => {
console.log(i)
}, 100)
}
结果: 0123456789
原因: 因为 let 是块级作用域,在 for 循环中,很明显我们是能找到一个 {}
构成的代码块的。每次循环都创建一个块级作用域,并且存上 i 的值,这里面的 let 定义的 i 值就是局部变量,所以每次循环改变的就是对局部变量赋值