首页 > 在循环里面使用setTimeout时有个问题突然想不明白了……

在循环里面使用setTimeout时有个问题突然想不明白了……

代码如下:

for(var i = 1; i <= 5; i++) {
    setTimeout(function timer() {
        console.log(i);
    }, i * 1000);
}

突然一下想不明白为什么是每秒输出一次了??


每一个讲javascript作用域教程都用这个作讲解例程


setTimeout本身是顺序执行的,没有异步这种,所以是1000,2000,3000这种

setTimeout内部的函数是异步的


我倒觉得这道题目的核心是闭包,“为啥每次输出都是6”,而不是“每秒输出一次”。

// 把代码改成这样看能不能理解
setTimeout(function timer() {
    console.log(i);
}, 1000);
setTimeout(function timer() {
    console.log(i);
}, 2000);
setTimeout(function timer() {
    console.log(i);
}, 3000);
setTimeout(function timer() {
    console.log(i);
}, 4000);
setTimeout(function timer() {
    console.log(i);
}, 5000);
setTimeout(function timer() {
    console.log(i);
}, 6000);
【热门文章】
【热门文章】