首先来看我的测试代码:
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可能表现得异常不同 浏览器。