代码如下:
let timeCount = 0;
for (let i = 0; i < 5; i++) {
setTimeout(() => {
console.log("i..", i);
console.log("timeCount..", timeCount);
}, 1000 * timeCount);
timeCount ++;
}
i打印出来是从0到4,timeCount一直是5,原理是什么呢?
代码如下:
let timeCount = 0;
for (let i = 0; i < 5; i++) {
setTimeout(() => {
console.log("i..", i);
console.log("timeCount..", timeCount);
}, 1000 * timeCount);
timeCount ++;
}
i打印出来是从0到4,timeCount一直是5,原理是什么呢?
let timeCount = 0;
for (let i = 0; i < 5; i++) {
setTimeout(() => {
**alert(2)**
console.log("i..", i);
console.log("timeCount..", timeCount);
}, 1000 * timeCount);
**alert(1)**
timeCount ++;
}
setTimeout即使时间设置为0,也是有延迟的啊,加粗的地方alert你就可以看到,会先执行setTimout的下边,五次之后开始执行setTimeout,所以timeCount已经加到了5
很简单啊。
因为for
循环先执行,然后再去执行异步的setTimeout
。
for
执行完了timeCount
就是5了,再去执行setTimeout
内的打印不就是5个5了!
而i是因为在循环内用了块级变量let
for (let i = 0; i < 5; i++) {
setTimeout(() => {
console.log("i..", i); // 1234
}, 100);
}
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
就是一直说的闭包
i
之所以没事是因为用了let
相当于而如果你把
i
放到全局作用域将会都是5