我不知道我是否已经清楚地描述了这个标题。我最好告诉你代码:
这里有4个函数,我想用其中一些函数创建一个异步执行:
function a(){
console.log('a');
}
function b(){
console.log('b');
}
function c(){
console.log('c');
}
function d(){
console.log('d');
}
a();
setTimeout(b, 1);
setTimeout(c, 0);
d();
此日志:
'A'
'd'
'B'
'c' 的
它会返回一个不同的结果来将我的代码更改为:
function a(){
console.log('a');
}
function b(){
console.log('b');
}
function c(){
console.log('c');
}
function d(){
console.log('d');
}
a();
setTimeout(b, 2); // delay seconds for b have been changed here
setTimeout(c, 0);
d();
此日志:
'A'
'd'
'C'
'B'
我的执行环境是在Chrome版本36.0.1985.125 MacOSX中。
我的问题是:
当我将b的延迟秒设置为2时,它的执行结果完全不同。 setTimeout(b,1)和setTimeout(b,2)之间有什么区别?
有人可以帮忙吗?非常感谢。
答案 0 :(得分:1)
大多数浏览器的调度时间分辨率最低。 HTML5将最小值设置为4毫秒。如果你要求4ms以下的任何东西,它将在4ms后执行一段时间。我有理由 - 但不是100% - 确定你看到了不可预测的行为 - 即你的两个例子应该在adcb
一段时间内出现,而adbc
在其他时间出现。
- 如果嵌套级别大于5,并且超时小于4,则将超时增加到4。
醇>
答案 1 :(得分:1)
setTimeout(b, 2);
上面的代码没有延迟2秒,它是2毫秒。 我不确定,也许这就是原因,因为javascript逐行执行代码。所以当你使用
时setTimeout(b, 1);
setTimeout(c, 0);
它已经传递了1毫秒,所以它将直接执行函数b,因为解析下一行代码会花费时间。
我做了一个测试来证明它。
a();
t1 = setTimeout(b, 2);
//javascript will parse and execute the following code ,and this costs some milliseconds.
for(i=0;i<100;i++){
console.log('no.'+i);
}
t2 = setTimeout(c, 0);
d();
结果是:
d
b
c