【发布时间】:2012-01-26 12:34:07
【问题描述】:
我们了解 JavaScript 是单线程的,但我们想确认我们对 JavaScript 中的异步事件处理的理解。更重要的是,我们想确认我们没有面临潜在的竞争条件。
从概念上讲,我们的移动应用程序是这样工作的:
我们在加载移动页面时调用函数
foo。在
foo的末尾,如果计数器大于0,我们使用setTimeout再次调用foo(延迟一秒)。如果计数器命中0,我们会加载一个新页面。超时保存在一个变量中。如果点击按钮,我们调用函数
do_tap并清除第二步中保存的超时变量(并执行其他操作)。
do_tap 和 foo 都更新了同一个页面元素,我们想确认它们不会互相踩踏。
问题:
假设在
foo的执行过程中发生了点击。浏览器队列do_tap会在foo完成后开始执行吗?换句话说,我们是否保证一旦foo启动,我们就永远看不到foo和do_tap交错执行?如果先点击怎么办?
do_tap保证在foo开始之前完成,对吧?
【问题讨论】:
-
由于执行是单线程的,
foo根本不可能在返回Do_tap之前开始执行(反之亦然)。阅读这篇文章,您将了解浏览器中的执行队列是如何工作的:ejohn.org/blog/how-javascript-timers-work
标签: javascript jquery html javascript-events