對於一個已經定義好的函數,如:
function sayhello(myname){ alert("hello"+myname); } setInterval(sayhello,300);
此時由於無法傳遞參數而只能輸出hello
而對於另一種寫法:
function sayhello(myname){ alert("hello"+myname); } setInterval(sayhello(Name),300);
此時會發生一種現象就是,window直接調用sayhello函數,並且傳入參數;
顯然這種方法不靠譜,因此對於這個問題其中一個比較常用的解決方法就是:
function timer(myname){ function sayhello(myname){ alert("hello"+myname); } return sayhello; } setInterval(sayhello(Name),300);
也就是說,我們可以把需要調用的函數嵌入到另一個函數中,然后把函數自身作為返回值(注意返回值不加括號)返回到新的函數中,
在通過定時器傳參給新函數,再通過新函數傳參給需要點用的函數。
其實主要原因還是在上一篇的隨筆中提到的的一個函數加不加括號的問題,加了括號返回的就是整個函數體,所以會立即執行該函數,
不加括號就是調用函數名,函數名就相當於一個指向函數的指針,而不是函數本身。
