gpt4 book ai didi

javascript - Javascript 运行时如何将 setTimeout() 识别为 WEB API?

转载 作者:行者123 更新时间:2023-12-05 01:03:51 25 4
gpt4 key购买 nike

当 javascript 运行时找到 setTimeout() 方法时,它会将其发送到事件表。运行时如何知道 setTimeout() 是一个 WEB API?它是否首先在当前上下文中查找 setTimeout() 方法,如果没有找到,则将其假定为 WEB API?

最佳答案

When javascript runtime finds setTimeout() method, it sends it to Event table.

JavaScript 不“知道”或关心 setTimeout 做了什么。 :-) 只是 setTimeout 是宿主(在您的示例中为浏览器)提供给 JavaScript 引擎的宿主环境中定义的函数之一。当您使用 JavaScript 调用函数时,函数的实现(由宿主环境提供)将使用您提供的信息执行。知道如何处理您提供给 setTimeout 的参数的是主机,而不是 JavaScript 引擎。

当主机(浏览器或 Node.js 或其他)需要创建新的运行时环境(例如,对于窗口)时,它所做的一件事就是创建一个对象作为主机提供的全局对象对于该环境(更恰本地称为 realm ),包括在该对象上放置任何提供主机定义功能的属性(如 setTimeout)。它通过 JavaScript 规范所称的 InitializeHostDefinedRealm 向 JavaScript 引擎提供该对象。抽象操作。当 JavaScript 引擎运行使用 setTimeout 的代码时,它会看到标识符 setTimeout 并在当前执行上下文中查看是否定义了 setTimeout那里;如果不是,则引擎查看父执行上下文,依此类推,直到它到达全局执行上下文,该上下文从主机提供的全局环境中获取其全局变量(部分;它还有其他全局变量)。因此,在找到与 setTimeout 匹配的函数后,JavaScript 引擎会调用该函数——该函数会为该函数运行主机定义的代码,从而设置计时器。

所以 JavaScript 引擎不知道 setTimeout 做了什么,只是在它得到的全局对象上有一个 setTimeout 函数主人。

关于javascript - Javascript 运行时如何将 setTimeout() 识别为 WEB API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73363836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com