IM希望有人能解釋的JavaScript以下使用...簡單的javascript問題?
我有一個頁面,它有一個腳本標記在它和內容如下所示
(function($){
// code
// and stuff
})(jQuery);
IM只是想了解這是什麼一樣爲主,
- 左括號在開始
- $符號的使用
- 在括號中的jQuery結尾
謝謝!
IM希望有人能解釋的JavaScript以下使用...簡單的javascript問題?
我有一個頁面,它有一個腳本標記在它和內容如下所示
(function($){
// code
// and stuff
})(jQuery);
IM只是想了解這是什麼一樣爲主,
謝謝!
這是一個匿名函數。
您提供的具體示例通常在jQuery(使用「$」)與另一個庫(原型也使用「$」)衝突時使用。
這樣做是說,只要在函數中使用「$」,就是引用jQuery對象。
正常:
$("foo").doStuff()
避免衝突:
jQuery("foo").doStuff()
使用匿名函數來避免衝突:
(function($){
$("foo").doStuff();
})(jQuery)
在最高級別,它聲明一個函數並在同一語句中調用它。
讓我們把它分解成各個組成部分:
首先,我們可以在一個函數中使用$
作爲參數/變量名,就像別的:
function foo($)
{
alert($);
}
foo('hi'); //alerts 'hi'
其次,我們可以指定一個函數到一個變量:
var foo = function($) {
alert($);
}
foo('hi'); //alerts 'hi'
最後,我們不必給函數名稱 - 我們可以聲明它們。我們將它們包裝在括號封裝整個函數聲明爲VAR,我們然後調用(就像上圖):
(function($) {
alert($);
})('hi');
在你的情況,jQuery
被傳遞到函數作爲$
參數某些對象。可能是jQuery庫的根對象,所以你可以調用它的功能。
讓我們先來看看內部函數聲明:
function($){
// code
// and stuff
}
這是一個匿名函數聲明,其中一個參數名爲$
。然後將該函數包裝在圓括號中,並使用jQuery
作爲參數,將(jQuery)
附加到括號中。
括號包裹的匿名功能,因此它可以被稱爲與參數是jQuery的
$
參考馬上在JavaScript中一個有效的變量名,所以很多框架使用它的簡潔。通過在這裏包含它作爲函數參數,你說你想用$
作爲jQuery的別名。這可以讓您的代碼儘可能短,並節省用戶的帶寬。
回答第一部分 - 你發送一個參考jQuery對象/框架將匿名函數。
簡言之:
這聲明它接受一個參數的匿名函數,由$的局部變量名錶示,並然後立即調用傳遞作爲第一個參數jQuery對象的功能。
減簡述:
在JavaScript函數聲明如下:
函數foo(ARG1,ARG2){
}
後來foo函數可以調用:
foo(「arg 1」,「arg 2」);
但是在javascript函數中是一等公民;如果你願意,你可以在一個變量中存儲一個函數。當這樣的變量名是函數的名字,所以你寫這樣的:
變種富=功能(ARG1,ARG2){
};
尾隨分號是必需的,因爲變量聲明(和賦值)是一個語句。後來,函數foo可以被稱爲:
FOO( 「ARG 1」, 「ARG 2」);
這裏的好處是,你可以通過該功能到另一個功能,或將其存儲在一個陣列,或什麼的。這類函數被稱爲匿名函數(因爲它們沒有函數名稱)。
裏面的匿名函數foo,如上面看到的,你可以聲明其保留withing該功能的範圍,並在該函數被聲明範圍不存在局部變量。例如,本地arg1和arg2變量不存在於變量foo的作用域中(但它們確實存在於foo中存儲的匿名函數中)。
這一招使我們能夠創造我們管什麼事情,而不必擔心踏着別人的命名空間被命名爲專用塊。
你可以寫你所提供的示例如下:
變種富=函數($){
}; fn(jQuery);
這是同樣的事情,但有那個醜陋的中間變量。不明顯的是,匿名函數的聲明「返回」一個函數引用,可以稍後調用......或者同時添加()的函數調用語法。
代碼正在做的是定義一個匿名函數,它創建一個私人範圍,然後立即調用它而不存儲在一個變量中。像這樣:
功能(ARG1){
}( 「ARG 1」);
我不完全確定爲什麼有一個額外的圓括號集合匿名函數定義,但他們至少使代碼更具可讀性/邏輯性。你只是傳遞參數到括號表達,這恰好是一個函數的結果:
(函數(ARG1){
})( 「ARG 1」);
所有的tQuery都允許jQuery擁有一個名爲jQuery的全局範圍變量,但也允許用戶使用$的簡寫而不會與其他使用相同名稱的javascript框架衝突。
突然之間有道理,謝謝! – Matt