Javascript for循环中setTimeout函数的返回值

Javascript for循环中setTimeout函数的返回值,javascript,Javascript,大家好,当我执行这段代码时,我的控制台日志中有40条代码,有人能解释一下原因吗 for (var i = 0; i < 10; i++) { setTimeout(function () { console.log(i); }, 300000) }; for(变量i=0;i

大家好,当我执行这段代码时,我的控制台日志中有40条代码,有人能解释一下原因吗

for (var i = 0; i < 10; i++) {
    setTimeout(function () {
        console.log(i);
    }, 300000)
};
for(变量i=0;i<10;i++){
setTimeout(函数(){
控制台日志(i);
}, 300000)
};

您的代码将在30.000毫秒后打印10

尝试将其设置为较短的时间段,您将看到10个打印


您可能在控制台中看到的是行号。

您在控制台上看到的是
setTimeout()
返回的
id
。如果再次运行该代码,可能会得到不同的值。我们无法预测这个
id
,它是随机的

如果要使用
setTimeout()
打印0-9之间的值,则需要注意范围

使用
bind()

console.log('before-loop');
对于(变量i=0;i<10;i++){
setTimeout(函数(){
console.log(this.i);
}.绑定({
i:我
}), 1000)
}
log('after loop')
当我执行这段代码时,我在控制台日志中得到了40

原因是
setTimeout()
将函数从执行队列中移出,只有在JavaScript处理完当前执行队列后才会调用该函数。

可能重复的谢谢,伙计,这个Id我们可以预测这个或rendom。因为当我一次又一次地运行我的代码时,我得到的值是40 50 60。。。。