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