我们知道JavaScript是单线程的,但我们想确认我们对JavaScript中异步事件处理的理解。更重要的是,我们想确认我们没有接触到潜在的竞争条件。JavaScript事件处理的竞争条件?
从概念上讲,我们的移动应用程序的工作原理是这样的:
我们在加载移动网页调用函数
foo
。截至
foo
最后,我们使用setTimeout
再次调用foo
(以一秒的延迟)如果计数器大于0
更大。如果计数器遇到0
,我们将加载一个新页面。超时保存在一个变量中。如果点击一个按钮,我们调用函数
do_tap
并清除步骤二中保存的超时变量(并执行其他操作)。
do_tap
和foo
更新都在同一个页面元素,我们想确认,他们不会互相步骤。
问题:
假设的
foo
的执行期间发生的抽头。在foo
完成后,浏览器队列do_tap
是否会开始执行?换句话说,我们保证一旦foo
开始,我们永远不会看到执行foo
和do_tap
交错?如果水龙头先出现怎么办?
do_tap
保证在foo
开始前完成,对吧?
由于执行是单线程的,因此'foo'在'Do_tap'返回之前开始执行是根本不可能的(反之亦然)。阅读本文,您将了解浏览器中的执行队列是如何工作的:http://ejohn.org/blog/how-javascript-timers-work/ – 2011-12-23 00:35:56