什么触发JavaScript代码执行?

什么触发JavaScript代码执行?,javascript,Javascript,如果你不知道我在说什么,请仔细阅读 在JS引擎的执行FiFo中有几个触发器将任务排队。这不是任何标准的一部分,所以我试图找到这些触发因素的呼气列表。(我想这一切都归结为内部事件处理程序,如脚本加载事件或计时器事件,但我宁愿忽略引擎的内部,从用户的角度来看问题。) 到目前为止,我已经确认 初始文档中的元素(包括由文档添加的元素。编写)* JS在运行时插入的元素* 事件处理程序 --这些包括各种各样的情况,如用户交互、错误事件、Web工作者消息或Ajax回调 window.setTimeout w

如果你不知道我在说什么,请仔细阅读

在JS引擎的执行FiFo中有几个触发器将任务排队。这不是任何标准的一部分,所以我试图找到这些触发因素的呼气列表。(我想这一切都归结为内部事件处理程序,如脚本加载事件或计时器事件,但我宁愿忽略引擎的内部,从用户的角度来看问题。)

到目前为止,我已经确认

  • 初始文档中的
    元素(包括由
    文档添加的元素。编写
    )*
  • JS在运行时插入的元素*
  • 事件处理程序
    --这些包括各种各样的情况,如用户交互、错误事件、Web工作者消息或Ajax回调
  • window.setTimeout
  • window.setInterval
*)仅在浏览器/DOM环境中

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

“JavaScript”作为一种语言名称不应该真正使用,因为它太广泛了

您所指的是ECMAScript。您可以在以下位置找到有关ECMAScript的信息: 该语言标准称为ECMA-262,大多数浏览器都支持5.1版

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

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

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

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

试图构建主机对象执行上下文管理器的全面列表是徒劳的

回答问题

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

JS引擎之间有什么区别吗?(ECMAScript主机环境)。 对这也超出了本答案的范围,取决于主机


有几十个主机环境,不断创建新的主机环境。触发创建新执行上下文的因素在很大程度上取决于主机环境。

与window.setTimeout和window.setInterval类似,现在有window.requestAnimationFrame,它将在下次显示刷新时(通常为1/60秒)尝试触发函数。您可以分组
setTimeout()
setInterval()
与事件处理程序一起使用,因为它们是:定时事件。基本上,只有两件事:事件处理程序和脚本加载。