假设我们有这个我无权访问/我无法更改的代码。
function f() {
// bad tasks
}
setInterval(f, 10000);
我想修改函数 f 所以我在下面写了这样的东西。
window.f = function(){
// good tasks
}
f()
但是其中的原始功能bad tasks
仍然每 10 秒运行一次。似乎传入的函数setInterval
仍然指向原始函数。我该如何阻止它?
假设我们有这个我无权访问/我无法更改的代码。
function f() {
// bad tasks
}
setInterval(f, 10000);
我想修改函数 f 所以我在下面写了这样的东西。
window.f = function(){
// good tasks
}
f()
但是其中的原始功能bad tasks
仍然每 10 秒运行一次。似乎传入的函数setInterval
仍然指向原始函数。我该如何阻止它?
您的假设是正确的:区间保持对原始f
.
如果不编辑原始脚本,就无法更改此设置。您所能做的就是清除站点上的所有间隔并开始另一个间隔。请参阅https://stackoverflow.com/a/8860203/27862。
单程:
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);
不使用setInterval
,setTimeout
改为使用。它将为您提供所需的控制。
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);