以setTimeout方法为例,JavaScript如何知道该特定方法是异步的?它如何知道必须将方法推入事件循环的队列?
有人可以对此有所了解吗?
谢谢。
答案 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的一部分。它是浏览器提供的窗口对象的一部分,计时器实际上是由浏览器执行的。