函数 foo 和 bar 的执行顺序是啥?
Posted
技术标签:
【中文标题】函数 foo 和 bar 的执行顺序是啥?【英文标题】:what is order will the functions foo and bar be executed?函数 foo 和 bar 的执行顺序是什么? 【发布时间】:2022-01-18 11:54:24 【问题描述】:我不明白 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 );
【问题讨论】:
如果 ajax 是一个使用回调的异步函数,而foo
和 bar
是这些回调,那么它们将以任意顺序执行。如果您希望它们按顺序运行,您必须将第二个 ajax 调用移动到 foo
(老派)或使用 .then() 或 await 代替(使用承诺版本的 ajax)
你是说foo然后吧
就像我说的:如果你想先运行 foo,你可以轻松实现。所以是的。
【参考方案1】:
foo 和 bar 将同时执行
javascript 通常在单个事件循环上运行。除非您将处理外包给 Worker,否则您将永远同时运行两个函数。
2- foo 然后 bar 或 3- bar 然后 foo,我认为是 1
您没有向我们展示ajax
函数,但是假设它会进行 HTTP 回调,然后将回调函数排队等待 完成 HTTP 调用响应已到达:
顺序取决于服务器对两个不同 HTTP 请求的响应速度以及浏览器接收响应所需的时间。
例如,http://some.url.1
可能 导致服务器在响应之前花费 30 秒进行真正完整的数据库查询,而 http://some.url.2
可能会做一些简单的事情,在 3 毫秒后得到响应:其中案例bar
将在foo
之前添加到队列中,因此首先运行。
【讨论】:
【参考方案2】:我们无法预测函数 foo 和 bar 的顺序。这些函数依赖于对某个api的ajax请求,所以无论哪个ajax请求先完成,都会调用相应的函数。
注意:如果你需要同时同步两个函数,那么你可以使用promise方法。
【讨论】:
【参考方案3】:您在第一次编辑时从问题中删除了正确答案。它是:“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
但是这些函数永远不会被同时调用。
【讨论】:
我没有使用promise,我只是想学习1- foo 和bar 将同时执行,或者2- foo 然后bar 或3- bar 然后foo, @xh9tlf8d82 如果没有有关ajax
的更多信息,您将无法了解。正确答案是您在编辑中删除的选项:“2- 我们不知道”以上是关于函数 foo 和 bar 的执行顺序是啥?的主要内容,如果未能解决你的问题,请参考以下文章
请问if函数啥意思,执行的顺序是啥 ,如果b3不等于空格往下怎么说?