for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i)
}, 2000)
}
for (let i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i)
}, 2000)
}
输出:
5 5 5 5 5
1 2 3 4 5
原因:
let有块级作用域,使用后该变量就释放了。而var的变量始终都是那一个,在延迟输出的时候,变量早已变成5,所以打印五个5。