如何在javascript中清除递归调用中的间隔

如何在javascript中清除递归调用中的间隔,javascript,setinterval,Javascript,Setinterval,我正在使用setInterval()函数以每5秒运行一个函数,但如果 满足某些条件 function do_the_job(){ //some code if(some_condition) { clearInterval(interval); }else{ clearInterval(interval); var interval = setInterval(do_the_job(),5000); } } 函数clearInter

我正在使用
setInterval()函数以每5秒运行一个函数,但如果
满足某些条件

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

函数
clearInterval()在这里不起作用

通过将其声明移到
if
语句之外,使
interval
成为一个全局变量或“范围更广”的变量,以便在清除时它实际上在范围内。

在代码中,
var interval=…
是局部变量,在函数调用范围之外不可见,因此在递归函数中不起作用

间隔
设为全局变量,它就会工作

解决方案

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

现在不是使用
setInterval()
的好时机,请尝试使用
setTimeout()

function do_the_job(){ 
 //some code
 if(some_condition)
  {
     // job done
  }else{
      setTimeout(do_the_job,5000);
      }
 }
不应该是无条件的

 var interval = setInterval(do_the_job(),5000);
 var interval = setInterval(do_the_job,5000);