这是用var声明的i,js先执行完for,i在window对象下会变成10,1000毫秒后再执行setTimeout,为什么还会执行10次呢
for(var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i)
},1000)
}
这是用let声明的i,for循环完10次,i变成9了,为什么这里的i能够被读出每一个值?
for(let i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i)
},1000)
}
for let
每次循环体内形成了不一样的块级作用域,匿名函数持有定义闭包变量i,即i副本值for var
声明的i类似全局变量,不存在块,setTimeout 中的i变量是引用,取自最终执行时i的状态值