1. 程式人生 > >requireJS中使用setTimeout和setInterval遇到的問題和解決方式

requireJS中使用setTimeout和setInterval遇到的問題和解決方式

javascript中與定時相關的API有setTimeout()和setInterval(),這2個函式功能不同,但是使用方式是一樣的。

javascript中下面的寫法,相當於是定義了一個密閉空間,在其中定義的變數和函式都是私有,只能本模組內訪問。

(function(){
	
	var msg = "msg";
	
})();

//報錯
alert(msg);

以前我寫javascript,都是使用setTimeout("say('aty');",1000);這種方式,由於say是全域性函式,所以這樣寫能夠正確執行。最近一個專案使用了requireJS框架,這要求我們要用模組化的方式編寫javascript。用之前的方式,使用setTimeout

就行不通了。

(function(){

	function say(msg)
	{
		alert(msg);
	}
	
	// 第1種方式
	//setTimeout("say('aty');",1000);
	
	// 第2種方式
	//setTimeout(say("aty"),1000);
	
	// 第3種方式
	setInterval(function(){
		say("aty");
	},1000);


})();


第一種方式會報錯,因為say函式僅僅在模組內部可見,setTimeout看不見;

第二種方式:程式碼會立即執行,沒有到達setTimeout的延時效果;

第三種方式:通過這種匿名函式呼叫,能夠滿足我們的需要,即解決了延時的問題,也解決了變數可見域的問題。