如何修改/覆盖由无限 setInterval 调用的 javascript 函数
How do I modify/overwrite a javascript function that is called by an infinite setInterval?
假设我们有这个我无法访问/我无法更改的代码。
function f() {
// bad tasks
}
setInterval(f, 10000);
我想修改函数 f,所以我在下面写了这样的东西。
window.f = function(){
// good tasks
}
但是包含bad tasks
的原始函数f()
仍然每 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);
参见
相关文章:
- 结合jQuery和jetpack无限滚动
- node.js:setInterval()正在跳过调用
- ng应用程序使脚本无限运行
- setInterval和clearInterval javascript无法按需工作
- Don'我不明白为什么我的setInterval+jQuery;不起作用
- JavaScript 素数搜索无限递归
- jquery/ajax无限滚动事件
- setInterval游戏循环的范围问题
- 内容结束时停止无限滚动
- 如何停止在JavaScript中无限克隆表单字段
- JavaScript setInterval problems
- 使用滚动溢出-x进行无限循环
- jQuery无限滑块插件
- 如何在Javascript中延迟setInterval
- 如何执行相同的setInterval()
- 如何重新排列此代码,以便我的 setInterval 无限停止循环
- 如何修改/覆盖由无限 setInterval 调用的 javascript 函数
- 无限地重复一个函数,最好不要使用setInterval()
- 拉斐尔变换对象对角线和无限setinterval
- 我想使用setInterval()每1秒更新一个输出列表,但它会得到无限循环输出