JavaScript解释器如何知道遇到的函数调用应该被同步还是异步处理?

时间:2020-05-25 19:21:42

标签: javascript

最近,我正在学习JavaScript中的异步函数。

我现在知道什么是回调,同步和异步之间的区别以及回调地狱反模式。

但是,我仍然有一个问题使我对已经学到的东西总是感到不舒服:

JavaScript解释器如何知道遇到的函数调用应该被同步还是异步处理? 例如,如果javascript解释器遇到...

setTimeout(callback,5000) //Assming that callback is a callback function

...它完成运行此功能(在主堆栈为空之后,在其自己的新堆栈中)。但是,当遇到...

function myFunction(callback) { callback(); }

...同步处理。

javascript解释器是否有应异步处理的函数列表?
如果不是,那么如何知道遇到的函数应同步还是异步处理?


对不起,如果我在英语语法上有任何错误,请先感谢您照常为我提供帮助。

2 个答案:

答案 0 :(得分:2)

您是对的。 JavaScript解释器确实知道异步函数,setTimeout是其中之一。异步行为由基础运行时代码处理。

如果不使用内置异步函数之一,就无法创建自己的异步函数。异步性来自解释器,该解释器又来自底层OS公开的异步I / O接口(或线程,如果只有阻塞I / O,则为线程)。

答案 1 :(得分:1)

用同样的方法知道alert()打开一个对话框,XMLHttpRequest()创建一个对象来发出网络请求。

函数执行功能。