gpt4 book ai didi

javascript - 什么触发 JavaScript 代码执行?

转载 作者:数据小太阳 更新时间:2023-10-29 03:57:29 24 4
gpt4 key购买 nike

如果您不知道我在说什么,请阅读 John Resig - How JavaScript Timers WorkIs JavaScript guaranteed to be single-threaded?

有几个触发器可以在 JS 引擎的执行 FiFo 中排队任务。这不是任何标准的一部分,所以我试图找到这些触发器的详尽列表。 (我猜这一切都归结为内部事件处理程序,例如脚本加载事件计时器事件,但我宁愿忽略引擎的内部结构并从用户的 Angular 看事情观点。)

到目前为止我已经确定

  • <script>初始文档中的元素(包括由 document.write 添加的元素)*
  • <script> JS在运行时插入的元素*
  • 事件处理程序
    -- 这些包括各种各样的情况,例如用户交互、错误事件、Web Worker 消息或 Ajax 回调......
  • window.setTimeout
  • window.setInterval

*) 仅在浏览器/DOM 环境中

还有吗? JS 引擎之间有什么区别吗?

最佳答案

“JavaScript”作为语言名称不应该真正使用它太宽泛了。

ECMAScript 就是您所指的。您可以在 http://www.ecmascript.org/ 找到有关 ECMAScript 的信息。该语言标准称为 ECMA-262,大多数浏览器都支持 5.1 版本。

setTimeout、setInterval、DOM 事件等都不是语言的一部分。这些由宿主环境作为宿主对象提供。在使用宿主对象时,为广泛的宿主环境编写 ECMAScript 应该特别小心。

ECMAScript 代码在执行上下文中执行。这采用堆栈的形式,并将当前执行上下文的状态保存在顶部。

有 3 种方法来推送执行上下文。全局代码、eval 和函数。这是启动代码的唯一方法。宿主环境将使用这些方法来执行代码。

宿主环境可以提供一个调用栈。这用于堆叠由可能在独立线程中运行的主机对象生成的函数调用。通常,诸如 setTimeout 之类的事件会将函数添加到调用堆栈。然后主机环境将等待直到执行上下文堆栈为空,然后从调用堆栈中弹出函数,创建一个新的执行上下文,执行代码直到完成。它将重复此操作,直到调用堆栈为空。

试图构建一个完整的宿主对象执行上下文管理器列表是徒劳的。

回答问题。

还有吗?是的,还有更多。这超出了这个答案的范围。请引用您希望使用的特定主机环境。

JS 引擎之间有什么区别? (ECMAScript 主机环境)。是的。同样,这超出了此答案的范围并取决于主机

有几十个宿主环境,并且一直在创建新的环境。触发创建新执行上下文的因素高度依赖于主机环境。

关于javascript - 什么触发 JavaScript 代码执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9939530/

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