通常定義函數並調用
function a(){
}
a();
或是
var a = function(){
}
a();
但是查看jquery源碼會發現它最外層的架構是這樣的
(function( window, undefined ) {
// jquery code
})(window);
解釋:首先jquery是定義了一個匿名函數(所謂的匿名函數就是沒有名字的函數,順便說一下閉包的概念:閉包就是在一個函數內部定義一個函數指向外部函數的一個成員變量,並且內部定義的這個函數訪問外部函數中定義的臨時變量)
,在最上面的例子中a實際上是function的一個引用,只要在函數的引用後面添加()就能讓函數執行,那可不可以直接在匿名函數後面添加()讓匿名函數執行呢
function(){}()
執行你會發現報錯,javascript引擎在掃描到function時會認為這個一個函數的聲明,所以直接在後面調用()會報錯,在一個語句後面直接添加括號和一個表達式後面添加括號是兩個概念,在語句後面添加的操作符會被認為是分組符號,分組符號內部需要傳入表達式才行,如果上面的改成function(){alert("1")}(1)就不會報錯,但是上面的函數還是不會執行,這只是相當於定義了2個毫無關系的表達式,function(){}(1);在表達式後面添加括號會讓表達式立即執行,但是如果是一個表達式後面添加()就會執行,所以
在匿名函數外面添加()然後再在括號後面添加()就可以進行調用了
javascript中()括起來的部分是不能包含語句的,會被當作表達式處理,所以如果function被()括起來以後就被javascript引擎作為function表達式處理了。
因此jquery最外層就是一個自調用匿名函數。但是他這麼做的最大原因是想定義一個命名空間,這樣就不會和全局的變量出現沖突
更多jquer、.net、sqlserver學習資料歡迎訪問 http://hovertree.com/