Ran*_*lue 28 javascript jquery
所述的jquery源设有的用途setTimeout
与两个0
和1
作为第二个参数.我的印象是他们都意味着"尽快执行功能".
它是否正确?这两者有区别吗?
Fre*_*ind 13
我认为答案是"它取决于"现在.
我们可以在不同的平台和浏览器中运行代码:
function setTimeouts() {
setTimeout(function() { console.log(2); }, 2);
setTimeout(function() { console.log(1); }, 1);
setTimeout(function() { console.log(0); }, 0);
}
for (var i = 0; i < 10; i++) {
setTimeouts();
}
Run Code Online (Sandbox Code Playgroud)
对于Node.js,0
转换为1
,所以它们完全相同:https://github.com/nodejs/node/blob/master/lib/timers.js#L319,结果可能是:
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
2
2
2
2
2
2
2
2
2
2
Run Code Online (Sandbox Code Playgroud)对于Chrome,结果与Node.js非常相似
对于Firefox,大多数0
将在之前打印1
:
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
Run Code Online (Sandbox Code Playgroud)小智 5
我不确定给出的答案是否正确。在 Chrome 中运行以下代码,0
显然可以更快地调用绑定函数(只需在0
和之间切换计时器值1
):
console.log("A");
console.log("B");
var start = new Date().getTime();
setTimeout(function() {
console.log(new Date().getTime() - start);
}, 0);
console.log("C");
console.log("D");
Run Code Online (Sandbox Code Playgroud)
0
似乎正在做类似 Node.js 的事情setImmediate
,将指令推到当前调用堆栈的末尾,同时1
调用实现视为最小值的任何内容。