Javascript 查找剩余的设置超时和设置间隔

Javascript 查找剩余的设置超时和设置间隔,javascript,google-chrome,firebug,google-chrome-devtools,Javascript,Google Chrome,Firebug,Google Chrome Devtools,有没有办法查看当前正在运行的超时和/或使用setTimeout或setInterval创建的间隔 既然每个都返回一个ID,那么有没有办法在开发人员控制台中查看当前的ID?这将帮助我发现应用程序中的“漏洞” 我现在唯一能想到的方法是为我的setInterval/setTimeout调用创建一个包装器。或者重写窗口中的内置项(即window.setTimeout=function()),然后让对象映射跟踪。基于 for(变量i=1;i

有没有办法查看当前正在运行的超时和/或使用setTimeout或setInterval创建的间隔

既然每个都返回一个ID,那么有没有办法在开发人员控制台中查看当前的ID?这将帮助我发现应用程序中的“漏洞”

我现在唯一能想到的方法是为我的setInterval/setTimeout调用创建一个包装器。或者重写窗口中的内置项(即
window.setTimeout=function()
),然后让对象映射跟踪。

基于

for(变量i=1;i<99999;i++){
窗口。清除间隔(i);
窗口清除超时(i);
}

希望这有帮助

我刚刚为您编写的这段代码(有趣的练习)覆盖了
setTimeout
cleartimout
函数,并创建了一个函数,用于跟踪在名为
timeout
的全局变量中哪些超时可用。在JSFIDLE上试用:

您可以轻松地将其调整为
setInterval
clearInterval


不过我想说的是,您可能需要跟踪超时,以避免应用程序中出现奇怪的行为…

@K2xL:是的,根据这里给出的链接,您可能可以尝试覆盖setTimeout/setInterval,然后用一行#
触发错误(新错误).lineNumber
如果运行时间太长,我认为查找setTimeout/Interval导致的“泄漏”的更好方法是在JS堆快照的单独部分中显示它们,而不是在开发人员控制台中提供它们的列表。
for (var i = 1; i < 99999; i++){
   window.clearInterval(i);
   window.clearTimeout(i);
}
(function() {
  window.timeouts = [];
  var _setTimeout = window.setTimeout;
  window.setTimeout = function() { 
    var id = _setTimeout.apply( this, arguments );
    timeouts.push( id );
    _setTimeout( function() {
        timeouts.splice( timeouts.indexOf( id ), 1);
      }, arguments[1] );
     return id;
  };
  var _clearTimeout = window.clearTimeout;
  window.clearTimeout = function( id ) { 
    _clearTimeout( id );
    timeouts.splice( timeouts.indexOf( id ), 1);
  };
})();