myInterval = setInterval(function(){
MyFunction();
},50);
function MyFunction()
{
//Can I call clearInterval(myInterval); in here?
}
如果我所编写的代码没问题,那么间隔是不会停止(不会被清除),这将帮助我在其他地方寻找问题的原因。谢谢。
编辑:假设在调用clearInterval之前完成了几个间隔,这就不需要setTimeout了。
myInterval = setInterval(function(){
MyFunction();
},50);
function MyFunction()
{
//Can I call clearInterval(myInterval); in here?
}
如果我所编写的代码没问题,那么间隔是不会停止(不会被清除),这将帮助我在其他地方寻找问题的原因。谢谢。
编辑:假设在调用clearInterval之前完成了几个间隔,这就不需要setTimeout了。
interval
变量的作用域内,就可以从任何位置取消它。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);
};
setInterval
还没有被评估时,如何将myInterval
传递给foo
函数? - Melablet
而不是 var
在 React 应用程序中似乎无法正常工作。 - elficosetInterval
内部的函数不是在创建时执行,而是由 setInterval
调用,这意味着 myInterval
已经被评估。 - Anime no SekaiclearInterval(myInterval);
如果你想随时取消 Interval,可以使用 clearInterval
。如果你想在第一次调用后立即取消,应该使用 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);
setTimeout
函数的递归调用。 - Sergii StotskyisetInterval
存在一些问题,只需阅读此文章 - http://javascript.info/tutorial/settimeout-setinterval - Sergii Stotskyi