如何在另一个函数中停止一个函数

时间:2016-12-28 08:41:52

标签: javascript jquery

如何在另一个函数中停止函数?

例如:

var	snow = function(){
  var interval = setInterval( function(){
    alert('letItSnow')
  }, 1000);
};
snow();

clearInterval(snow.interval) - 异常

4 个答案:

答案 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);
}