以下是2个场景
for (var i=0; i<3; ++i)
{
let num = i;
setTimeout(function() { alert(num); }, 10);
}
输出系列: 提醒:0,1,2
for (var i=0; i<3; ++i)
{
// variables introduced in this statement
// are scoped to the block containing it.
let num = i;
setTimeout(function() { alert(num); }, 10);
}
输出系列: 提醒:0,2,1
两个相同的代码,但结果不同。
任何想法???
答案 0 :(得分:1)
我认为您的问题的答案可能是setTimeout
使用非常低超时的性质,以及无保证的排序。
请参阅此链接:https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
注意这一行:
此API不保证计时器将按计划运行。由于CPU负载,其他任务等原因导致延迟。
这意味着根据具体情况,您的相同的代码块确实会输出不同的结果。 setTimeout
也不保证您使用的确切时间,尤其是在超时非常低时(例如您选择的10ms)。