2016-12-28 53 views
0

如何在另一功能中停止功能?如何在另一功能中停止功能

例如:

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

clearInterval(snow.interval) - 異常

+0

你'clearInterval'因爲在函數中的變量不是函數對象的屬性拋出異常。 – doug65536

回答

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

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); 
1

如果我理解正確的問題,你要停止snow功能之外的時間間隔。

您可以在snow函數之外聲明interval變量,以便在snow函數之外使用它(以清除間隔)。

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