函数 foo 和 bar 的执行顺序是什么?

what is order will the functions foo and bar be executed?

我不明白 foo 和 bar 函数的执行顺序是什么?

1- foo 和 bar 将同时执行,或者 2- foo 然后 bar 或 3- bar 然后 foo,我认为 1- 但我不确定

var res = {};

function foo(results) {
    res.foo = results;
}

function bar(results) {
    res.bar = results;
}

// ajax (..) is some arbitrary function given by a library
ajax( "http://some.url.1", foo );
ajax( "http://some.url.2", bar );

您在第一次编辑时从问题中删除了正确答案。它是:“2- 我们不知道”

不了解 ajax 的实现(或文档)就无法知道顺序。顺序甚至可以在不同的 运行 之间改变。

这是一个例子:

function ajax(url, fn) {
    setTimeout(fn, Math.random() * 1000);
}

var res = {};

function foo(results) {
    res.foo = results;
    console.log('foo');
}

function bar(results) {
    res.bar = results;
    console.log('bar');
}

// ajax (..) is some arbitrary function given by a library
ajax( "http://some.url.1", foo );
ajax( "http://some.url.2", bar );

您可以 运行 多次,顺序会改变。有时是

foo
bar

有时是

bar
foo

但函数永远不会同时被调用。

foo and bar will execute in the same time

JavaScript 通常在单个事件循环上运行。除非您将处理工作外包给 Worker,否则您 永远不会 同时拥有两个功能 运行ning。

2- foo then bar or 3- bar then foo, I think 1

您没有向我们展示 ajax 函数,但是 假设 它进行 HTTP 回调,然后将回调函数排队等待 完成 HTTP 响应已到达:

顺序将取决于服务器对两个不同 HTTP 请求的响应速度以及浏览器接收响应所需的时间。

例如,http://some.url.1 可能 导致服务器在响应之前花费 30 秒进行真正完整的数据库查询,而 http://some.url.2 可能会做一些简单的事情在 3 毫秒后得到响应:在这种情况下,bar 将在 foo 之前添加到队列中,因此首先是 运行。

我们无法预测函数 foo 和 bar 的顺序。这些函数依赖于 ajax 对 api 的请求,因此无论哪个 ajax 请求先完成,它都会调用相应的函数。

注意:如果您需要同时同步这两个函数,那么您可以使用 promise 方法。