關於定時器調用有參函數的問題

對於一個已經定義好的函數,如:函數

function sayhello(myname){
     alert("hello"+myname);  
}
setInterval(sayhello,300);

此時因爲沒法傳遞參數而只能輸出hellospa

而對於另外一種寫法:指針

function sayhello(myname){
     alert("hello"+myname);  
}
setInterval(sayhello(Name),300);

此時會發生一種現象就是,window直接調用sayhello函數,而且傳入參數;code

顯然這種方法不靠譜,所以對於這個問題其中一個比較經常使用的解決方法就是:blog

function timer(myname){
    function sayhello(myname){
     alert("hello"+myname);  
}
   return sayhello;
}
setInterval(sayhello(Name),300);

也就是說,咱們能夠把須要調用的函數嵌入到另外一個函數中,而後把函數自身做爲返回值(注意返回值不加括號)返回到新的函數中,io

在經過定時器傳參給新函數,再經過新函數傳參給須要點用的函數。function

 

其實主要緣由仍是在上一篇的隨筆中提到的的一個函數加不加括號的問題,加了括號返回的就是整個函數體,因此會當即執行該函數,class

不加括號就是調用函數名,函數名就至關於一個指向函數的指針,而不是函數自己。定時器

相關文章
相關標籤/搜索