doA( function1(){
doC();
doD( function2(){
doF();
} )
doE();
} );
doB();
假设doA()和doD()是异步调用,我们有序列: A-> B-C-> D-> E->˚F
我的推理是否真的有道理? 我完全错了吗?
这个问题来自阅读" 你不了解Javascript "作者:凯尔辛普森。
答案 0 :(得分:1)
好像这本书做得很好,你已经很好地理解了基础知识: - )
一些小问题可能会使您的推理更加精确:
" 假设doA()和doD()是异步调用" - 让我们说doA
和doB
是("异步")函数,异步调用作为参数传递给它们的回调函数。我们可能会进一步限制它们将相应的回调调用一次(以避免混淆)。
" 将function1发送到队列" - 它可能不会立即这样做。这是后台处理的全部要点,只有当相应任务(由doA()
或doD()
启动)完成后,回调才会排队。一个简单的例子是超时。如果等待多个异步回调,则可能会以任意顺序调用它们,具体取决于其任务执行的时间。
同样,当没有更多的东西要执行时,它可能需要等待以便在队列中出现某些内容,并且只要没有任何内容就会空闲。
" 队列中的内容 - >致电C " - 事实上,function1
在队列中,然后调用doC()
和其他人。你不应该跳过这一步:-)同样叫doF()
。
答案 1 :(得分:0)
你快到了。
很难理解这种行为究竟会如何发展。与异步运行的其他函数相比,它可以在多长时间和密集程度上有所不同。
你缺少的另一个部分是" function1"本来不会要求返回功能" doA"。对于" function1"甚至运行,它需要" doA"在其运行期间的某个时间发出回调()。否则," doA"将简单地返回,并且不会调用您编写的任何嵌套函数。