javascript(事件驱动语言)中函数的执行顺序

javascript(事件驱动语言)中函数的执行顺序,javascript,function,execute,Javascript,Function,Execute,我对这个例子感到困惑 结果 `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先出来。”。我还不太清楚,请详细解释一下,或者请给我指一些具体的资料,谢谢,setTimeout说要在1秒后执

我对这个例子感到困惑

结果

`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先出来。”。我还不太清楚,请详细解释一下,或者请给我指一些具体的资料,谢谢,

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');
});

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');
});
do_a()和do_b()会立即依次执行。当执行do_a()时,它启动一个计时器,以1000ms为单位打印输出(打印完do_b()的输出后)

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

do_a()和do_b()立即一个接一个地执行。当执行do_a()时,它启动一个计时器,以1000ms为单位打印输出(打印完do_b()的输出后)


因此,它们是按顺序执行的,只是不等待响应,即:在继续执行之前,一个不依赖于另一个来完成。因此,请记住,您在setTimeout中运行的是匿名函数。这完全独立于您创建的两个原始函数Hanks很多,我是新手,它是否与“事件驱动语言”中的一些概念有关?因为我认为它不同于“传统的编程模型,它是一个批处理编程模型”,谢谢:在继续执行之前,一个并不依赖于另一个来完成。所以,请记住,您在setTimeout中运行的是一个匿名函数。这完全独立于您创建的两个原始函数Hanks很多,我是新手,它是否与“事件驱动语言”中的一些概念有关?因为我认为它不同于“传统的编程模型,它是一个批处理编程模型”,谢谢这可能会有帮助这可能会有帮助谢谢你,这是一个更好的回调示例,它是否与“事件驱动语言”中的一些概念有关?假设你是一个蜘蛛,但是有很多腿。每只腿都靠在网上的线上。如果有任何bug出现在web上的任何地方,你只需要伸出一条腿来处理它。每条腿都在倾听昆虫撞击那根线的震动。放在那根线上的一条腿可以自己抓住虫子,而另一条腿则耐心地坐着等待它们的线。如果两条或两条以上的线同时振动,每只脚都可以抓住自己的昆虫,而不需要整个蜘蛛移动。事情就是这样。你可以听很多事件并为每个事件分配一个函数。非常感谢,非常简单易懂,我也看了《蜘蛛侠》:),我可能需要一本书来深入了解事件驱动,谢谢你的帮助。我强烈推荐Douglas Crockford的优秀部分。这是一个很好的语言指南。谢谢你,这是一个更好的回调示例,它是否与“事件驱动语言”中的一些概念有关?假设你是一只蜘蛛,但有任意数量的腿。每只腿都靠在网上的线上。如果有任何bug出现在web上的任何地方,你只需要伸出一条腿来处理它。每条腿都在倾听昆虫撞击那根线的震动。放在那根线上的一条腿可以自己抓住虫子,而另一条腿则耐心地坐着等待它们的线。如果两条或两条以上的线同时振动,每只脚都可以抓住自己的昆虫,而不需要整个蜘蛛移动。事情就是这样。你可以听很多事件并为每个事件分配一个函数。非常感谢,非常简单易懂,我也看了《蜘蛛侠》:),我可能需要一本书来深入了解事件驱动,谢谢你的帮助。我强烈推荐Douglas Crockford的优秀部分。这是一本极好的语言指南。