JavaScript如何知道方法是异步的?

时间:2017-11-22 01:39:05

标签: javascript asynchronous

以setTimeout方法为例,JavaScript如何知道该特定方法是异步的?它如何知道必须将方法推入事件循环的队列?

有人可以对此有所了解吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

var queue = [];
function add(callback) {
    queue.push(callback);
}
  

JavaScript如何知道必须将callback函数推送到queue数组?

它不“知道”。它只执行add函数。

setTimeout没有任何区别 - 除了该函数不是由JavaScript程序员编写,而是作为浏览器内置的本机API的一部分公开。 JavaScript不知道它做了什么,它只是调用它。

答案 1 :(得分:0)

首先,要了解JavaScript在自己的执行环境(运行时)中运行。该运行时只是在主机操作系统中运行的一个应用程序,并且该OS能够进行多线程处理(异步操作)。当操作系统执行其他操作时,JavaScript运行时可以做一件事。

JavaScript运行时会同步处理所有代码。这是设计并写入ECMAScript规范。因此,运行时无需弄清楚。

大多数客户端提供额外的API(超出规范中的内容),并且这些操作通常是异步完成的,因为它们不是由运行时完成的 - 它们由客户端完成。 setTimeout()就是一个例子。它不是JavaScript的一部分。它是浏览器提供的窗口对象的一部分,计时器实际上是由浏览器执行的。