JavaScript异步编程1.1.3 队列_JavaScript异步编程1.1.3 队列试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > JavaScript异步编程 > 1.1.3 队列

JavaScript异步编程——1.1.3 队列

调用setTimeout的时候,会有一个延时事件排入队列。然后setTimeout调用之后的那行代码运行,接着是再下一行代码,直到再也没有任何代码。这时JavaScript虚拟机才会问:“队列里都有谁啊?” 如果队列中至少有一个事件适合于“触发”(就像1000毫秒之前设定好的那个为期500毫秒的延时事件),则虚拟机会挑选一个事件,并调用此事件的处理器(譬如传给setTimeout的那个函数)。事件处理器返回后,我们又回到队列处。 输入事件的工作方式完全一样:用户单击一个已附加有单击事件处理器的DOM(Document Object Model,文档对象模型)元素时,会有一个单击事件排入队列。但是,该单击事件处理器要等到当前所有正在运行的代码均已结束后(可能还要等其他此前已排队的事件也依次结束)才会执行。因此,使用JavaScript的那些网页一不小心就会变得毫无反应。 你可能听过事件循环这个术语,它是用于描述队列工作方式的。所谓事件循环,就像代码从一个循环中不断取出而运行一样: runYourScript(); while (atLeastOneEventIsQueued) { fireNextQueuedEvent(); }; 这隐含着一个意思,即触发的每个事件都会位于堆栈轨迹的底部。关于这一点,1.4节会进一步阐述。 事件的易调度性是JavaScript语言最大的特色之一。像setTimeout这样的异步函数只是简单地做延迟执行,而不是孵化新的线程。JavaScript代码永远不会被中断,这是因为代码在运行期间只需要排队事件即可,而这些事件在代码运行结束之前不会被触发。 下一节将更细致地考查异步JavaScript代码的构造块。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《JavaScript异步编程》其他试读目录

• 第1章:深入理解JavaScript事件
• 1.1.1 现在还是将来运行
• 1.1.2 线程的阻塞
• 1.1.3 队列 [当前]
• 1.2 异步函数的类型
• 1.2.1 异步的I/O函数
• 1.2.2 异步的计时函数
• 1.3 异步函数的编写
• 1.3.1 何时称函数为异步的
• 1.3.2 间或异步的函数
• 1.3.3 缓存型异步函数
• 1.3.4 异步递归与回调存储
• 1.3.5 返值与回调的混搭
• 1.4 异步错误的处理
• 1.4.1 回调内抛出的错误
• 1.4.2 未捕获异常的处理
• 1.4.3 抛出还是不抛出
• 1.5 嵌套式回调的解嵌套
• 1.6 小结