真正的异步javascript函数

时间:2013-05-15 10:44:12

标签: javascript asynchronous

setTimeout(function () { /*logic*/ }, 0);

真的让函数异步吗?

4 个答案:

答案 0 :(得分:4)

不,使函数异步 - 如果函数需要一些时间,它仍会阻塞该线程。

但是,setTimeout会将此功能置于浏览器的事件队列中。因此它将在已经在该队列上并等待执行的所有其他事件之后执行(并且如果您没有使用超时,将在脚本块完成后执行)。

准确地说,setTimeout(xxx,0)没有任何意义,最小延迟为4毫秒,如in the spec所述。

总的来说,时间比我在这里解释的要复杂一点,但这可能足以解释说明;)有关详情,请查看John Resig's Article

答案 1 :(得分:1)

不,不。

它只是将函数放在具有给定延迟的事件队列中(这里的延迟为零)。如果当前有任何其他函数排队等待执行,它将被置于它们后面并且必须等到那些(包括当前活动的)函数被执行。

为了测试这个,你可以做类似ethis

的事情
console.log( 'start' );
setTimeout(function () {
    console.log("timeout");
}, 0);

// some very long running code 
console.log( 'end' );

您仍然可以获得输出:

  

启动

     

     

超时

答案 2 :(得分:0)

不完全

console.log("1");
setTimeout(function () {
    console.log("2");
}, 0);
console.log("3");

你可能会看到输出......

1
3
2

超时不会阻止代码的执行,但所有浏览器都会强制执行最小超时延迟。

答案 3 :(得分:0)

有点难以解释整个javascript计时器的事情。可能这会对你有帮助。

John Resig Blog: How does Javascript timers work