參考文章
滿多的情況下我們會看到下面這一種寫法
(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物件就變成了函式的區域變數之一
這樣就省略了中間那些 "找不到,再往外一層找" 的過程
多少能提升一些效率
滿多的情況下我們會看到下面這一種寫法
(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物件就變成了函式的區域變數之一
這樣就省略了中間那些 "找不到,再往外一層找" 的過程
多少能提升一些效率
留言
張貼留言