標籤:style blog http java color 使用
經常用,今天總結一下,下文摘自某網友的總結:
(function($){...})(jQuery)實際上是匿名函數,不懂得朋友可以繼續往下看。
這裡實際上是匿名函數 function(arg){...} 這就定義了一個匿名函數,參數為arg 而調用函數時,是在函數後面寫上括弧和實參的,由於操作符的優先順序,函數本身也需要用括弧,即: (function(arg){...})(param) 這就相當於定義了一個參數為arg的匿名函數,並且將param作為參數來調用這個匿名函數 而(function($){...})(jQuery)則是一樣的,之所以只在形參使用$,是為了不與其他庫衝突,所以實參用jQuery var fn = function($){....}; fn(jQuery);
(funtion(){})();立即執行函數;相當於先申明一個函數,聲明完後直接調用;如果參數如:
(funtion(str){alert(str)})("output"));相當於:funtion OutPutFun(str){alert(str);};OutPutFun("output");
最近在整理
javascript
學習,發現這個問題了
,在網上發現這麼個解釋
最清
楚
最明白
;
(function(){})()
相當於先定義
function xx(){}
,後調用
xx();
()
是最高優先順序的,所以先執行
function(){}
,
這個定義了一個匿名函數,等於
xx=function(){}
接著就是調用
xx()
了
;
給個例子
JScript code
functionf1(a)
{
alert(a);
}
functionf2(a)
{
returnfunction(){
alert(a);
}
}
這裡的
var x=f2
就等於把函數傳遞給了
f2,
然後要執行這個函數
,
就必須加
()
也就是
x();
也就是
f2()
還是
(function f2(a){
return function(){
alert(a);
})();
另外還有一個問題
就是命名空間的問題
YY = YY||{};---
聲明一個叫
YY
的命名空間(定義一個全域的變數)
(function() {
YY.Lang=function()
{------
聲明一個叫
YY.Lang
的命名空間
(通過全域變數的
增加屬性的方式把閉包裡的對象傳到全域變數中,實現代碼封裝的效果)
isUndefined: function(o) {
return typeof o === ‘undefined‘;
},
isString: function(o) {
return typeof o === ‘string‘;
}
};
})();
---
調用方法
alert(YY.Lang.isString(‘test me‘));
這時候就有人不明了,
樓上為什麼要加
(function()
{
和
)();
最外面的這兩行,
有什麼用啊?
J
Script code
YY=YY||{};
//---
聲明一個叫
YY
的命名空間(定義一個全域的變數)
//(
function()
{
YY.Lang=function()
{
//------
聲明一個叫
YY.Lang
的命名空間
(通過全域變數的增加屬性的方式把閉包裡的對象傳
到全域變數中,實現代碼封裝的效果)
isUndefined:function(o)
{returntypeofo===‘undefi
ned‘;
},
isString:function(o)
{returntypeofo===‘string‘;
}
};
}
//)();
//---
調用方法
alert(YY.Lang.isString(‘test
me‘));
疑問在這:??????
注釋掉這兩行有什麼不一樣的呢?不就是申明嗎,為什麼要用
()()執行一下啊?
答:
(
function(){})()
意思是立即執行前一個括弧裡的
function
,相當於是一個匿名函數
;
由於裡面
的代碼的執行,
定義了
YY.Lang
這個對象,
所以可以執行
alert(YY.Lang.isString(‘test
me‘));
調用
isString
方法。
但是,如果按照你寫的
functionaa(){..};//
只是定義了一個叫
aa的函數,但是並沒有執行
alert(YY.Lang.isString(‘test
me‘));//
執行的時候會報找不到
isString
的方法。
這麼寫有什麼好處??????????????
(function{})()
的寫法有個好處,就是能很好的利用
javascript
的變數的可見範圍為執行指令碼
時節省空間的。例如以下寫法
1和寫法2達到的目的是一樣的,但是寫法1的由於a變數的
可見範圍只是在匿名函數體內,
所以a
在執行完這個匿名函數後就釋放空間了。
但是寫法2
會一直存在該頁面中。
寫法
1
:
JScript
code
(function(){vara=2;
alert(a);
})();
寫法
2
:
JScript
code
vara=2;
alert(a);