- 思考, 下面的代码为什么会输出不一样的结果?
for(var i = 0; i< 2; i++){
setTimeout(function(){
console.log(i)
}, 100)
}
// 输出 2, 2
for(let i = 0; i< 2; i++){
setTimeout(function(){
console.log(i)
}, 100)
}
// 输入 0, 1
- {}在es6中会生成一个块级作用域
- let/const 声明的变量会绑定当前的作用域,不受外部影响。
- for每一次循环, 会创建一个块级作用域。
上面的代码相当于
{
let i = 0;
setTimeout(function () {
console.log(i)
}, 100)
}
{
let i = 1;
setTimeout(function () {
console.log(i)
}, 100)
}