在JavaScript中,执行路径的概念从某一点开始(例如事件处理程序),控件在某些时候被放弃回浏览器。
此流程是否有正确的名称?
最初我认为你可以将其称为“当前的堆栈框架”,但在阅读维基百科后,我发现它指的是其他东西。这不是调用堆栈,这是我们去过的地方的问题。
(为尴尬的标题道歉...我愿意接受建议:))
答案 0 :(得分:5)
我听说过这个叫做"转向事件循环" (由Mozilla的工程师和TC39的成员,ECMAScript标准委员会)。
在ECMAScript标准中,作业是defined作为"一个抽象操作,当没有其他ECMAScript计算当前正在进行时启动ECMAScript计算"。这正是您正在寻找的内容,但该术语并未得到广泛使用。
HTML标准describes event loops in bewildering detail,但它使用的术语任务,也未被广泛使用。
答案 1 :(得分:4)
我认为你所要求的内容没有一个完善的标准术语。
我刚刚听说它是“回到事件循环”或“完成当前执行线程并返回事件循环”。
并且,node.js使用术语“next tick”来表示类似的内容。
Javascript(在浏览器和node.js中)是事件驱动的,并且所有异步操作或用户事件都通过将事件放入事件队列来执行,并且只有在当前执行的线程完成时才处理该事件。然后,JS引擎可以将下一个事件从事件队列中拉出并开始执行。因此,由于底层机制是一个事件队列驱动,因此在您用来描述它的任何术语中使用短语“event”是很常见的。
This article on Understanding process.nextTick()指的是“事件循环的每个滴答”。
你可以把这个事件循环想象成一个回调队列 在事件循环的每个刻度上由Node处理。
node.js documentation for process.nextTick()
使用“事件循环转为完成”。
当前事件循环转为完成后,调用回调 功能
node.js documentation for setImmediate()
指的是“事件循环迭代”。
immediates的回调按照它们的顺序排队 创建。每个事件循环都处理整个回调队列 迭代。如果从执行内部排队立即 回调,直到下一个事件循环才会立即触发 迭代。
答案 2 :(得分:1)
您要找的是tick
这个词吗?在node.js(无可否认是JavaScript)中,有一个名为process.nextTick()
的函数,它接受一个回调函数,该函数应该在当前执行周期之后立即执行“tick”。这是我一直使用的术语,但可能还有其他常用术语来描述JavaScript的事件周期。
答案 3 :(得分:1)
您正在寻找的术语是"事件循环" 。
虽然事件循环的意义之一是"循环"在应用程序的整个生命周期中,它也意味着简单的一个周期" - 至少用英文。
在语法上,使用规则类似于"道路"之间的区别,它指的是在旅程中采取的整个路线和"道路",其指的是在许多细分市场中的一段道路,它们共同组成了道路"。
因此,在谈论我们称之为架构的#34;事件循环"。当谈到这个循环中的一个循环时,我们简单地说'#34;循环"或更具体地说,"事件循环的一个循环"。
这个术语很旧。它起源于70年代末和80年代初期创建的GUI框架。原始Mac OS的早期开发人员文档将其称为事件循环(Mac当时没有线程支持,因此像javascript一样,整个操作系统都是单线程的。)
80年代早期发布的古老Tk UI库也将其称为事件循环。顺便说一句,Tcl编程语言,就像之后的javascript一样,带有内置的事件循环。
传统上,用于手动控制回到事件循环的术语是" yield" 。在某些语言和/或框架中,实际上有一个名为" yield"的关键字或函数。去做这个。在Tcl中,它被称为"更新"因为这是你打算从代码中故意输入事件循环的函数的名称。
Javascript没有此功能*因此javascript编程中没有用于故意进入事件循环的术语。解释器将简单地进入事件循环,其中没有其他任何东西可以运行(基本上当它到达所有文件的末尾时)。
*注意:从技术上讲,您可以间接导致代码暂停并在浏览器中进入事件循环。如果你更新DOM然后立即查询它(例如设置margin-width然后查询offsetWidth)浏览器将进入事件循环以重排DOM。但是这个功能不能用于其他任何事情,因为浏览器只会执行重排过程而不会触发任何其他事件。
答案 4 :(得分:0)
您指的是空的“回调队列”。如其他答案所述,这会被“事件循环”清空。
Philip Roberts(@latentflip)在JSConf EU '14上就此主题发表了精彩的演讲。这是他的演讲的视频和记录http://2014.jsconf.eu/speakers/philip-roberts-what-the-heck-is-the-event-loop-anyway.html。伟大的手表,一定会让你更好地理解javascript的执行方式!