如何理解setTimeout

时间:2014-02-27 11:15:59

标签: javascript node.js google-chrome settimeout

首先来看我的测试代码:

setTimeout(function () {
    console.log(1)
}, 1);
setTimeout(function () {
    console.log(2)
}, 0);

在Chrome中,它返回1,2。但在Firefox中,它返回2,1。 不同浏览器之间似乎很奇怪。和Node一样,V8引擎就像Chrome,但代码 以下在Node和Chrome之间运行也不同。

var start = Date.now();

setTimeout(function () {
    console.log(Date.now() - start);
    for(var i = 0; i < 1000000000; i++) {}
}, 1000);

setTimeout(function () {
    console.log(Date.now() - start);
}, 2000);

在节点中运行代码:

@tinple ➜  normalTest  node timer.js
1015
2002

在Chrome控制台中运行代码:

var start = Date.now();

setTimeout(function () {
    console.log(Date.now() - start);
    for(var i = 0; i < 1000000000; i++) {}
}, 1000);

setTimeout(function () {
    console.log(Date.now() - start);
}, 2000);
10
1000 VM67:5
3811 VM67:10

这让我很困惑,我真的很想弄明白。我知道这个功能 由浏览器或节点声明。它无法保证我们预设的确切延迟。 那么如何深入理解呢?

更新

我只知道具有短延迟的setTimeout可能表现得异常不同 浏览器。

0 个答案:

没有答案