use*_*894 3 javascript settimeout webapi
当 javascript 运行时找到 setTimeout() 方法时,会将其发送到事件表。运行时如何知道 setTimeout() 是 WEB API?它是否首先在当前上下文中查找 setTimeout() 方法,如果没有找到,则将其假定为 WEB API?
\n\n当 javascript 运行时找到 setTimeout() 方法时,会将其发送到事件表。
\n
JavaScript 不“知道”也不关心它知道什么setTimeout。:-) 这只是setTimeout主机环境中定义的函数之一,由主机(在您的示例中为浏览器)提供给 JavaScript 引擎。当您使用 JavaScript 调用该函数时,该函数的实现(由宿主环境提供)将使用您提供的信息执行。是主机而不是 JavaScript 引擎知道如何处理您提供给setTimeout.
当主机(浏览器或 Node.js 或其他)需要创建一个新的运行时环境(例如,对于一个窗口)时,它所做的事情之一就是创建一个对象作为主机为该环境提供的全局对象(更准确地称为领域),包括在该对象上放置setTimeout提供主机定义功能的任何属性(例如)。它通过 JavaScript 规范所称的InitializeHostDefinedRealm抽象操作向 JavaScript 引擎提供该对象。当 JavaScript 引擎运行使用 的代码时setTimeout,它会看到标识符setTimeout并在当前执行上下文中查找是否setTimeout已定义;如果不是,引擎将查看父执行上下文,依此类推,直到到达全局执行上下文,全局执行上下文从主机提供的全局环境中获取其全局变量(部分;它还有其他全局变量)。因此,找到匹配的函数后setTimeout,JavaScript 引擎会调用该函数\xc2\xa0\xe2\x80\x94,该函数运行该函数的主机定义代码,从而设置计时器。
所以 JavaScript 引擎不知道它的作用是什么setTimeout ,只知道setTimeout它从主机获得的全局对象上有一个函数。
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |