Javascript JS调试器是否挂起整个JS事件循环?

Javascript JS调试器是否挂起整个JS事件循环?,javascript,debugging,javascript-debugger,Javascript,Debugging,Javascript Debugger,我有一些非常奇怪的行为。我有以下JQuery: myElement.fadeOut(100); 存在某种竞争条件,因此元素最终不会被隐藏。如果我将调试器放在那一行并逐步完成代码,它工作正常,元素淡出并隐藏。可以说这是一场灾难 我的问题不是关于比赛条件本身的问题。考虑到JavaScript运行时的性质,我想知道这是如何发生的。根据我的理解,以下谓词是正确的: fadeOut()由JQuery animate()实现 animate()由一系列setTimeout()调用实现 setTimeout

我有一些非常奇怪的行为。我有以下JQuery:

myElement.fadeOut(100);
存在某种竞争条件,因此元素最终不会被隐藏。如果我将调试器放在那一行并逐步完成代码,它工作正常,元素淡出并隐藏。可以说这是一场灾难

我的问题不是关于比赛条件本身的问题。考虑到JavaScript运行时的性质,我想知道这是如何发生的。根据我的理解,以下谓词是正确的:

  • fadeOut()由JQuery animate()实现
  • animate()由一系列
    setTimeout()
    调用实现
  • setTimeout()
    计划在某个时间点执行队列中的函数
  • 当事件到达队列的开头时,将执行该函数
  • 只有一个按顺序执行的事件循环
  • 在任何给定的时间点,只有一个通过调用堆栈的函数/路径正在执行
  • 假设我正在调试程序中单步执行一个函数,则必须暂停执行,并且不能执行其他函数


    我看不出在这种情况下,种族状况怎么可能出现您能否建议调试代码和未调试代码的执行情况有何差异?

    您的要点是正确的,但如果浏览器支持,则使用它代替
    setTimeout()

    例如,如果通过AJAX调用异步创建了
    myElement
    ,但在不等待请求完成的情况下调用了
    fadeOut()
    ,则调试会话可能会对代码的行为产生影响


    在这种情况下,在调用
    fadeOut()
    之前,手动单步执行代码可以为请求返回和创建元素提供足够的时间,而在正常情况下,请求不会返回。

    使用成功或完全回调,而不是超时,如果是这样的话。总是假设ajax可能会挂起一点。我肯定没有为此使用超时!