Cra*_*lot 6 javascript jquery html5 javascript-events
我们知道JavaScript是单线程的,但我们想确认我们对JavaScript中异步事件处理的理解.更重要的是,我们想确认我们没有遇到潜在的竞争条件.
从概念上讲,我们的移动应用是这样的:
我们foo在加载移动页面时调用函数.
最后foo,如果计数器大于,我们setTimeout会foo再次调用(延迟一秒)0.如果计数器命中0,我们加载一个新页面.超时保存在变量中.
如果点击了一个按钮,我们调用函数do_tap并清除第二步中保存的超时变量(并执行其他操作).
do_tap并且foo都更新相同的页面元素,我们想确认它们不会互相踩踏.
问题:
假设在执行期间发生敲击foo.浏览器队列do_tap会在foo完成后开始执行吗?换句话说,我们保证一旦foo开始,我们永远不会看到执行foo和do_tap交错吗?
如果首先出现水龙头怎么办?do_tap保证在foo开始前完成,对吧?
事件执行继续单线程,直到事件处理完毕.在此之前,不会启动任何其他事件循环.
换句话说,当一个处理程序正在为某个事件运行时,任何其他事件的其他处理程序都不会中断它.
因此,问题1和问题2的答案都是"是".(当然,这是在禁止浏览器漏洞的情况下,但是如果你考虑到这一点,你就不会走得太远.它不像是有任何同步原语可以依赖.我说这只是因为有一段时间在此期间Safari可以在运行另一个"DOMready"事件处理程序的过程中触发"DOMready"事件.但是,这显然是一个错误.)