5
我有一些非常奇怪的行为正在进行。我有以下jQuery:JS调试器是否暂停整个JS事件循环?
myElement.fadeOut(100);
有一些种族情况正在发生,使元素不会最终隐藏。如果我在该行上放置了一个调试器并逐步完成代码,那么它可以正常工作,并且元素会淡出并隐藏起来。称它为Heisenbug。
我的问题不在于比赛条件本身。鉴于JavaScript运行时的性质,我想知道如何发生这种情况。按照我的理解如下谓词为真:
- 淡出()由JQuery的动画()
- 动画()实现是由一系列的
setTimeout()
电话 setTimeout()
调度函数在执行实施某个时间点的队列- 当事件到达队列的开始位置时,将执行该功能。
- 只有一个事件循环,按顺序执行。
- 在任何给定的时间点,只有一个通过调用堆栈的函数/路径正在执行。
鉴于我正在逐步调试我的调试器中的函数,所以必须暂停执行,并且不能执行其他函数。
我看不出在这种情况下出现竞态条件的可能性。 您能否建议执行的调试代码和非调试代码之间有何不同?
啊,你知道吗,有一个阿贾克斯负载。这可能是... – Joe 2012-07-20 14:08:13
使用成功或完成回调,而不是超时,如果这是怎么回事。总是假设阿贾克斯可能会挂一点点。 – 2012-07-20 14:10:13
我当然没有为此目的使用超时! – Joe 2012-08-15 14:38:02