如何在另一个函数中停止函数?
例如:
var snow = function(){
var interval = setInterval( function(){
alert('letItSnow')
}, 1000);
};
snow();
clearInterval(snow.interval) - 异常
答案 0 :(得分:2)
在javascript中,访问范围是通过函数声明限制的,因此您的本地声明的变量不会在外部访问,因此您必须将其返回或将其设置为全局变量(父范围中可用的变量)
你需要对你的功能稍作调整,这样做:
var snow = function(){
return setInterval(function(){
alert('letItSnow');
}, 1000);
};
var interval = snow();
//on some event -- clearInterval(interval)
您还可以将setTimeout
及其返回的ID设为function
的属性,该属性可在其所有实例上使用,即
var snowClass = function(){
this.init = function(msg){
this.interval = setInterval(function(){alert(msg)},1000);
}
}
var snowObj = new snowClass();
snowObj.init('Let it snow');
//on some event -- clearInterval(snowObj.interval)
答案 1 :(得分:1)
您指的是假定为snow.interval
对象属性的snow
。但是在你的代码interval
中只是局部变量。相反,您可能希望在全局范围内定义interval
,以便可以在全球范围内访问http://www.w3schools.com/js/js_scope.asp
var interval, snow = function(){
interval = setInterval( function(){
console.log('letItSnow')
}, 1000);
};
snow();
clearInterval(interval);
答案 2 :(得分:1)
如果我正确理解了这个问题,您希望停止snow
函数之外的间隔。
您可以在interval
函数之外声明snow
变量,以便在snow
函数之外使用它(以清除间隔)。
var interval;
var snow = function(){
interval = setInterval(
function(){
alert('letItSnow')
},
1000
);
};
snow();
clearInterval(interval);

答案 3 :(得分:0)
在您的代码中尝试此操作
var timeout1 = {};
var timeout2 = {};
function function1(){
//codes
if(timeout2){
clearTimeout(timeout2);
}
timeout1 = setTimeout("function1()",5000);
}
function function2(){
//codes
if(timeout1){
clearTimeout(timeout1);
}
timeout2 = setTimeout("function2()",5000);
}