清除匿名setInterval

时间:2019-02-08 18:50:34

标签: javascript

如何清除类似于以下内容的匿名setInterval函数,以使 i 停止递增?

var i = 0;
setInterval(function(){
    console.log(i);
    i++;
 }, 1000);



2 个答案:

答案 0 :(得分:0)

您需要将其存储在变量中,然后将该变量传递到clearInterval中。

var i = 0;
let variable = setInterval(function(){
    i++;
    console.log(i)
 }, 1000);
//to clear interval after 5 seconds to check if it works
setTimeout(() => clearInterval(variable),5000)

答案 1 :(得分:0)

强烈不建议这样做!

尽管如此,您可以通过临时修补window.setInterval函数来完成此操作,以便捕获对计时器的引用。

以下是合并的示例,有关实现示例,请参见下文。

// Declare a variable to store the interval
let rogueInterval = null;

//Override the setInterval method
const oldSetInterval = window.setInterval;
window.setInterval = (...args) => {
  rogueInterval = oldSetInterval(...args);
}


var i = 0;
setInterval(function() {
  console.log(i);
  i++;
}, 1000);


// Reset it
window.setInterval = oldSetInterval;


// Will clear your rogueInterval after 5 seconds
setTimeout(() => {
  clearInterval(rogueInterval);
}, 5000);

听起来您正在通过script.src包含脚本,因此,您需要先放置一个内嵌脚本标签才能覆盖setInterval,然后再放置一个内嵌脚本标签以重置{{ 1}}:

setInterval

不幸的是,这种方法假设问题文件中只有一个<script> // JS that overrides the setInterval </script> <script src="problem-file.js"></script> <script> // JS that resets the setInterval </script> ,并且setInterval本身并不是异步设置的。如果绝对需要,您可以将猴子补丁保留在原处,并检查传入的函数的字符串化版本,如果它符合某些条件,则将其捕获。