![](/img/trans.png)
[英]Javascript - How do I get a variable from a setInterval() function?
[英]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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.