2012-04-18 2 views
0

내가 액세스 할 수 없거나 변경할 수없는이 코드가 있다고 가정 해 보겠습니다.무한 setInterval에 의해 호출되는 javascript 함수를 수정하거나 덮어 쓰려면 어떻게해야합니까?

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

나는 함수 f를 수정하여 밑에 이와 같이 작성하려고합니다. 거기에 bad tasks

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

그러나 원래의 기능을 f()는 여전히 매 10 초마다 실행하고 있습니다. 전달 된 함수가 setInterval에있는 것처럼 보입니다. 여전히 원래 함수를 가리키고 있습니다. 어떻게 중지합니까?

+0

당신을'함수 f() {} 'var f = function() {}'이 아닌? –

답변

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); 
+0

질문을 보면 Noob이'setInterval' 부분을 변경할 수 있다고 생각하지 않습니다. – Yoshi

+0

@ Yoshi가 옳습니다. setInterval 부분을 변경할 수 없습니다. – Noob

+0

첫 번째 방법은 작동하지 않습니다 (테스트 됨). 두 번째 방법은 Noob에서 작동하지 않습니다. 왜냐하면 내가 액세스 할 수 없거나 변경할 수 없기 때문이며 Noob은 이전 간격을 지울 수 없기 때문입니다. –

1

당신의 가정은 올바른 : 간격은 원래 f에 대한 참조를 유지합니다.

원본 스크립트를 편집하지 않고 변경할 수있는 방법은 없습니다. 할 수있는 작업은 사이트의 모든 간격을 지우고 다른 간격을 시작하는 것입니다. 그것에 대해서는 https://stackoverflow.com/a/8860203/27862을 참조하십시오.

0

setInterval을 사용하지 마십시오. 대신 setTimeout을 사용하십시오. 필요한 제어 기능을 제공합니다.

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

지금 나쁜 일이 벌어지고 있다면 당신은 f를 다시 작성하려면 :로 정의 된 불량 code_ 무엇 _function 확인

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

See also

관련 문제