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 に答える