如何在不知道 setInterval() 和 setTimeOut() ID 的情况下清除它们?

Mic*_*iew 1 javascript time jquery timeout

如果我不知道setInterval()or的返回值setTimeOut(),我还可以使用clearInterveral(id)orclearTimeOut(id)来清除它们吗?

谢谢。

abu*_*uba 5

您可以替换原来的 setTimeout 和 setInterval ,例如:

   setInterval = (function( oldsetInterval){
    var registered=[],
    f = function(a,b){
        return registered[ registered.length ] = oldsetInterval(a,b)
    };
     f.clearAll = function(){
        var r;
        while( r = registered.pop()) { 
           clearInterval( r );
        }       
    };
    return f;    
})(window.setInterval);
Run Code Online (Sandbox Code Playgroud)

现在:

setInterval( function(){alert(5000)}, 5000 );
setInterval( function(){alert(10000)}, 10000 );

setInterval.clearAll();
Run Code Online (Sandbox Code Playgroud)

建议来自 @PointedEars 的评论,您不应该使用相同的名称,因此:

reportingSetInterval = as above;
reportingSetInterval( function(){alert(5000)}, 5000 ); 
Run Code Online (Sandbox Code Playgroud)

等等..