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() 裡面那支匿名函式(外界呼叫不到, 或說無法驅動其執行)

留言

熱門文章