js 函式執行的注意事項
最近在工作中發現一件值得記下來的小知識
就是function 未必要立即執行其所定義的內容, 好比下面的例子:
function Hello(name){
var returnFunction = function(){
alert("Hello, " + name);
}
return returnFunction;
}
當我們這樣呼叫...
Hello("zouber");
你會預期整個Hello function 執行一遍
所以會馬上alert "Hello, zouber" 這個字串
但其實不然, 你會發現沒有任何動靜
原因其實不難理解, 就是Hello() 裡面其實只定義了一個function 叫returnFunction
而在Hello 的末尾回傳該function 而已, 並沒有任何驅動執行的指令
所以, 我們必須在呼叫Hello() 時以一個變數來承接回傳的function, 例如:
var trigger = Hello("zouber");
如此一來trigger 就指向了Hello() 裡面的 returnFunction
也可以說trigger 等於就是該function
所以如果這樣寫 setTimeout(trigger, 0);
就等於是在呼叫那部分在0毫秒後執行
setTimeout 的第一個參數(trigger)為 "物件實字(object literal)", trigger 其實是這樣的字串
function (){
alert("Hello, " + name);
}
帶以"zouber" 這個傳入參數
所以呼叫setTimeout(trigger, 100);
就等於呼叫Hello() 裡面那支匿名函式(外界呼叫不到, 或說無法驅動其執行)
留言
張貼留言