跳到主要內容

解讀JavaScript的匿名函式寫法

參考文章

滿多的情況下我們會看到下面這一種寫法
(function(m) {
    alert(m);
})("Hello");

解讀方式是 ( 實際上執行的function內容 )( 參數 );
等同於下面這段
var x = function(m) { alert(m); };
x("Hello");

或是更普遍的寫法
function y(m) {
    alert(m);
}
y("Hello");

以上三種寫法結果相同,差別在於第一種寫法不會留下任何函數或變數
對於一次性的動作來說,可以做到真正的船過水無痕

至於在jQuery Plugin開發時,習慣上會寫成以下的格式
(function($) {
    //Plugin可以放心地用$代替jQuery
    //不必擔心網頁可能被設了jQuery.noConflict()
    //將$符號保留給其他Javascript Library使用
})(jQuery);

另外還有細節需要注意
有時候會看到傳入 "window" 作為匿名函式的參數

(function(window){
       ...// original code
})(window);

這是因為JavaScript的全域變數及函式是掛在 window 這個物件底下
如果要在函式中使用全域變數或全域函式
JavaScript 的找尋方法是 區域 -> 找不到再找外層 -> 找外層loop -> window
如果將 window 物件作為函式的參數引入,window物件就變成了函式的區域變數之一
這樣就省略了中間那些 "找不到,再往外一層找" 的過程
多少能提升一些效率

留言