2017-07-07 80 views
0

我正在练习回调函数,这个问题是我似乎无法解决的问题。Settimeout不立即返回

function foo() {  
    var data = 10;  
    bar(function (players) { 
    data = players; 
    });  
    return data; 
} 

function bar (callback) { 
    setTimeout(callback, 0); 
} 

var result = foo(); 

我意料之中的,因为data = players结果是不确定的,并没有什么传过来的球员。由于setTimeout函数使用0作为延迟,它不应该先运行,然后返回数据吗?我查看了MDN页面,似乎有关于嵌套超时限制的信息,以>=4ms。这是否也适用于这种情况?

+0

setTimeout is asynchronous call –

回答

1

由于setTimeout函数使用0作为延迟,它不应该先运行,然后返回数据吗?

没有,即使有0延迟,传递给setTimeout回调预计在next tick of the event loop运行。

换句话说,保证在当前执行完成后回调被执行

+0

“如果队列中没有其他消息,则会立即处理该消息;但是,如果有消息,setTimeout消息将不得不等待其他消息被处理。由于setTimeout延迟,我猜测队列中的“消息”是函数调用? – James

+0

不一定。但是,当前代码终止后,队列只能看*。即只有在'var result = foo();'被执行后。 –