1

我对http://dreamerslab.com/blog/en/javascript-callbacks/中的示例感到困惑

function do_a(){
// simulate a time consuming function
    setTimeout( function(){
    console.log( '`do_a`: this takes longer than `do_b`' );
}, 1000 );
}

function do_b(){
    console.log( '`do_b`: this is supposed to come out after `do_a` but it comes out before      `do_a`' );
}

do_a();
do_b();

结果

`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`
`do_a`: this takes longer than `do_b`

而作者的解释是“然而javascript是一种事件驱动的语言。如果do_a比do_b花费的时间长,do_b的结果比do_a先出来;”。我还是不太清楚,请详细解释,或者请给我一些具体的材料,谢谢,

4

2 回答 2

1

setTimeout 表示在 1 秒后执行其功能。每个函数都会立即返回,而 setTimeout 会在该时间之后执行。

实际上,do_a() 和 do_b() 是按顺序执行的。但 setTimeout 的结果与 do_a 或 do_b 无关。

此外,这是一个糟糕的回调函数执行示例,因为 setTimeout 与回调无关。一个更好的例子如下:

var a = function(callback){
    setTimeout(function(){
        callback();
    }, 1000);

    console.log('1');
}

var b = function(callback){
    setTimeout(function(){
        callback();
    }, 2000);
    console.log('2');
}

a(function(){
    console.log('3');
});
b(function(){
    console.log('4');
});
于 2012-12-12T02:53:31.400 回答
0

do_a() 和 do_b() 一个接一个地立即执行。当 do_a() 执行时,它会启动一个计时器,在 1000 毫秒内打印输出(在 do_b() 的输出被打印之后)

所以他们确实按顺序执行,它只是不等待响应

于 2012-12-12T02:53:40.223 回答