Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何理解setTimeout_Javascript_Node.js_Google Chrome_Settimeout - Fatal编程技术网

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