0

假设我们有这个我无权访问/我无法更改的代码。

function f() {
// bad tasks
}
setInterval(f, 10000);

我想修改函数 f 所以我在下面写了这样的东西。

window.f = function(){
// good tasks
}

f()但是其中的原始功能bad tasks仍然每 10 秒运行一次。似乎传入的函数setInterval仍然指向原始函数。我该如何阻止它?

4

3 回答 3

1

您的假设是正确的:区间保持对原始f.

如果不编辑原始脚本,就无法更改此设置。您所能做的就是清除站点上的所有间隔并开始另一个间隔。请参阅https://stackoverflow.com/a/8860203/27862

于 2012-04-18T07:31:42.040 回答
0

单程:

function f() {
    //bad tasks
}

setInterval(function() { f(); }, 10000);

window.f = function() {
    //good tasks
}

这样计时器将不会调用传递给它的旧 f() ,而是调用一个名为 f 的函数。

另一种方式:

function f() {
    //bad tasks
}

var interval = setInterval(f, 10000);

function g() {
    //good tasks
}

clearInterval(interval);
setInterval(g, 10000);
于 2012-04-18T06:50:35.200 回答
0

不使用setIntervalsetTimeout改为使用。它将为您提供所需的控制。

function f() {
 // bad tasks
 fTimeout = setTimeout(f,1000);
}
//start
var fTimeout = setTimeout(f,1000);

现在,如果发生了不好的事情并且您想重写f

clearTimeout(fTimeout);
window.f = function() { 
            /* good stuff */ 
            fTimeout = setTimeout(f,1000);
           }
fTimeout = setTimeout(f,1000);

也可以看看

于 2012-04-18T07:49:58.217 回答