2014-09-27 57 views
-1

我正在使用setInterval();函數每5秒運行一個函數,但是我想清除此間隔,如果 某些條件滿足。如何在javascript中遞歸調用中清除間隔

function do_the_job(){ 
//some code 
if(some_condition) 
    { 
    clearInterval(interval); 
    }else{ 
     clearInterval(interval); 
     var interval = setInterval(do_the_job(),5000); 
     } 
} 

功能clearInterval();在這裏不起作用。

回答

0

在你的代碼中,var interval =...是本地的,在函數調用的範圍之外是不可見的,因此在遞歸函數中不起作用。

使interval成爲一個全局變量,它將起作用。

解決方案

var interval; 
function do_the_job(){ 
//some code 
if(some_condition) 
    { 
    clearInterval(interval); 
    }else{ 
     clearInterval(interval); 
     interval = setInterval(do_the_job(),5000); 
     } 
} 
1

通過將其聲明移到if聲明之外,使interval成爲全局或「更高範圍」變量,因此它在清除時實際上處於範圍內。

1

這是不使用setInterval()的好時機,嘗試setTimeout()代替

function do_the_job(){ 
//some code 
if(some_condition) 
    { 
    // job done 
    }else{ 
     setTimeout(do_the_job,5000); 
     } 
} 
0
var interval = setInterval(do_the_job(),5000); 

應該沒parethesees

var interval = setInterval(do_the_job,5000);