requireJS中使用setTimeout和setInterval遇到的問題和解決方式
阿新 • • 發佈:2019-01-03
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的延時效果;
第三種方式:通過這種匿名函式呼叫,能夠滿足我們的需要,即解決了延時的問題,也解決了變數可見域的問題。