如果你不知道我在说什么,请读John JavaScript计时器如何工作和JavaScript保证是单线程的吗?
JS引擎的执行FiFo中有几个将任务排队的触发器。这不是任何标准的一部分,所以我试图找到那些触发器的累人列表。(我想这一切都归结为内部事件处理程序,比如脚本加载事件或计时器事件,但我宁愿忽略引擎的内部,从用户的角度来看待问题。)
到目前为止我已经确定
<script>
元素(包括document.write
添加的元素)*<script>
元素*window.setTimeout
window.setInterval
*)仅在浏览器/DOM环境中
再来一次?JS引擎之间有什么区别吗?
发布于 2015-06-04 22:39:43
"JavaScript“作为一种语言名称不应该真正使用,它太宽泛了。
ECMAScript就是你所指的。您可以在ECMAScript上找到有关http://www.ecmascript.org/的信息,该语言标准称为ECMA-262,大多数浏览器都支持5.1Edition。
setTimeout、setInterval、DOM事件等不是语言的一部分。它们是由主机环境作为主机对象提供的。在使用主机对象时,应该特别注意为广泛的主机环境编写ECMAScript。
ECMAScript代码在执行上下文中执行。这采取堆栈的形式,并将当前执行上下文的状态保存在顶部。
有三种方法可以推送执行上下文。全局代码、eval和函数。这是启动代码的唯一方法。主机环境将使用这些方法执行代码。
主机环境可以提供调用堆栈。这用于堆栈由主机对象生成的函数调用,这些对象可以在独立的线程中运行。通常,像setTimeout这样的事件将向调用堆栈添加一个函数。然后,宿主环境将等待执行上下文堆栈为空,然后从调用堆栈中弹出函数,创建一个新的执行上下文,执行代码直到完成。它将重复此操作,直到调用堆栈为空。
试图构建一个完整的主机对象执行上下文管理器列表是徒劳的。
回答问题。
再来一次?是的还有很多呢。这超出了这个答案的范围。请参考您希望使用的特定主机环境。
JS引擎之间有什么区别吗?(ECMAScript主机环境)。是。同样,这超出了这个答案的范围,并且依赖于主机。
有几十个主机环境,新的环境一直在创建。触发创建新执行上下文的因素在很大程度上取决于主机环境。
https://stackoverflow.com/questions/9939530
复制