Javascript的setInterval函数来清除自己?

myInterval = setInterval(function(){ MyFunction(); },50); function MyFunction() { //Can I call clearInterval(myInterval); in here? } 

间隔不会停止(不被清除),如果我上面编码的是好的,那么它会帮助我在别处寻找导致问题的原因。 谢谢。

编辑:我们假设它完成clearInterval被调用之前的几个间隔,它删除了setTimeout的需要。

只要你有保存intervalvariables的范围,你可以从任何地方取消它。

在“孩子”范围内:

 var myInterval = setInterval(function(){ clearInterval(myInterval); },50); 

在“兄弟姐妹”范围内:

 var myInterval = setInterval(function(){ foo(); },50); var foo = function () { clearInterval(myInterval); }; 

如果超出范围,你甚至可以通过这个间隔:

 var someScope = function () { var myInterval = setInterval(function(){ foo(myInterval); },50); }; var foo = function (myInterval) { clearInterval(myInterval); }; 
 clearInterval(myInterval); 

会做诀窍,取消间隔,只要你需要它。 如果您想在第一次通话后立即取消,则应该改为setTimeout 。 当然你可以在Interval函数中调用它。

 var myInterval = setInterval(function() { if (/* condition here */){ clearInterval(myInterval); } }, 50); 

在这里看到一个例子 。

 var interval = setInterval(function() { if (condition) clearInterval(interval); // here interval is undefined, but when we call this function it will be defined in this context }, 50); 

要么

 var callback = function() { if (condition) clearInterval(interval); }; // here interval is undefined, but when we call this function it will be defined in this context var interval = setInterval(callback, 50); 

从你的代码看来,你想要做的就是运行一个函数并运行一遍又一遍,直到完成一些工作。

这实际上是setTimeout()一个任务,方法是类似的:

  var myFunction = function(){ if( stopCondition ) doSomeStuff(); //(do some stuff and don't run it again) else setTimeout( myFunction, 50 ); } myFunction(); //immediate first run 

就那么简单 :)

当然,如果你真的想用setInterval出于某种原因,@ jbabey的答案似乎是最好的:)

你可以通过使用window.setTimeout技巧来做到这一点

 var Interval = function () { if (condition) { //do Stuff } else { window.setTimeout(Interval, 20); }; }; window.setTimeout(Interval, 20);