Javascript 如何理解setTimeout
首先是我的测试代码:Javascript 如何理解setTimeout,javascript,node.js,google-chrome,settimeout,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拥有类似Chrome的V8引擎,但代码 在Node和Chrome之间,下面的运行方式也不同 var start = Date.now(); setTimeout(
setTimeout(function () {
console.log(1)
}, 1);
setTimeout(function () {
console.log(2)
}, 0);
在Chrome中,它返回1,2。但在Firefox中,它返回2,1。
不同的浏览器之间似乎有点奇怪。Node拥有类似Chrome的V8引擎,但代码
在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);
在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
var start=Date.now();
setTimeout(函数(){
console.log(Date.now()-start);
对于(var i=0;i<100000000;i++){}
}, 1000);
setTimeout(函数(){
console.log(Date.now()-start);
}, 2000);
10
1000 VM67:5
3811 VM67:10
这真的让我困惑,我真的很想弄明白。我知道这个函数是
由浏览器或节点声明。它不能保证我们预设的准确延迟。
那么,如何深入理解它呢
更新:
我只知道setTimeout和短延迟可能会根据不同的情况表现得很奇怪
浏览器。行为取决于您使用的平台和硬件。不要忘记调用
setTimeout
也需要处理器计时。我手头没有链接,但我认为规范表明最小有效延迟为4ms,因此通过指定较短的延迟,您实际上可以得到两个setTimeout
调用都有4ms的结果。(这可以在Chrome中解释结果。)@nnnnnn::现在,如果嵌套的级别不超过5级,则最低限制由用户代理决定。谢谢@Qantas94Heavy。是的,我刚找到那个。而且
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