1.用var来实现for循环调用settimeout
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 0)
}
来看一下输出结果:
可以看到它的输出结果,每次循环输出的均是同一个值,这是因为var是存在变量提升的,实际只执行一次,所以每次输出结果一样
2.用let来实现for循环调用settimeout
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 0)
}
再看一下输出结果:
可以看到使用let声明的for循环每次执行值都会不断叠加,因为let声明的变量是块级作用域的,不存在变量提升,也不存在重复声明的情况,所以值会改变。