loopwithtimeout.js来自async javascript book的例子

时间:2014-04-06 03:07:37

标签: javascript asynchronous

在尝试阅读Async javascript book时(也许我还没有资格阅读本书),我看到了以下示例:

for (var i = 1; i <=3; i++ ) {
   setTimeout(function() { console.log(i); }, 0);
};

我无法理解为什么答案是4,4,4

我试着理解提到哪本书,但我不明白他们所指的是什么。 有人可以把这个放在更多外行人的任期吗?

更新(在我收到所有评论后).. 为了帮助自己理解,我为像我这样的新手添加了一些控制台日志,可能需要帮助w /同样的问题。这是一个很棒的网站!我将回来更多..

for ( var i = 1; i <= 3; i++ ) {
    console.log(i);
    setTimeout( function() { console.log(i); }, 0 );
    console.log("still", i);
};
console.log('jo');

1
still 1
2
still 2
3
still 3
jo
4
4
4
[Finished in 0.1s]

1 个答案:

答案 0 :(得分:0)

当浏览器有时间时,settimeout被放到要完成的项目列表中。 浏览器只有在完成所有其他工作后才能读取该列表。

以不同的方式解释它: JavaScript是单线程的,它一次只能做一件事,只有在没有代码运行时才能完成settimeouts列表