我已經看到Javascript函數在函數的大括號後立即使用括號,我不明白它們用於什麼。花括號後的括號是什麼意思?
例子:
function foo(bar){
return bar;
}(0);
是什麼
(0)
辦?這是什麼叫?
什麼時候應該使用這種技術?
我已經看到Javascript函數在函數的大括號後立即使用括號,我不明白它們用於什麼。花括號後的括號是什麼意思?
例子:
function foo(bar){
return bar;
}(0);
是什麼(0)
辦?
這是什麼叫?
什麼時候應該使用這種技術?
在你的榜樣,你只需要兩個語句,它等同於:
function foo(bar){
return bar;
}
0;
這是而不是一個自我調用函數。第一條語句是函數聲明,第二條語句只是簡單的數字文字0
,它什麼都不做。圓括號不執行該功能,它們是grouping operator。
我們如何證明這一點?試試:
function foo(bar){
return "bar";
}(0);
並告訴我輸出是什麼。
這將是自調用函數,如果我們有一個函數表達式。爲此,您可以使用分組操作符強制將其評估爲表達式。
例如:
(function foo(bar){
return bar;
})(0);
這是一個命名函數表達式。表達式((function ....)
)的結果是函數引用,並且(0)
執行函數,傳遞0
作爲參數。
括號的位置也可能是:
(function foo(bar){
return bar;
}(0));
也許這就是你所看到的東西。
這項技術已經被廣泛地在這裏討論:What is the purpose of a self executing function in javascript?
謝謝菲利克斯,你一定有鷹眼:) – jon
他們立即調用類似的,當你調用一個函數功能:
function foo() {
alert('hello');
}
foo(); // call
你也可以把它直接:
(function foo(){
alert('hello');
})(); // <--------------
目前你有Function Declaration
。 要真正自我調用它,你需要有像這樣的括號(使它的表情):
(function foo(bar){
return bar;
})(0);
,現在是Function Expression
,將立即調用。要知道Function Declaration
和Function Expression
之間的差異,通過Kangax看看這個優秀的文章:
是什麼(0)呢?
它是傳遞給foo
功能,因此bar
將0
內部函數的參數。
這是什麼叫?
這是一個自我啓動或自我執行的功能。您可能還想看到this。
什麼時候應該使用這種技術?
當你想立即調用一個函數並且只在該函數表達式中保持變量作用域。它不會被外部世界所用,或者說是該函數表達式之外的代碼。
瞭解更多:
提示:'(function(...){...})(...);'每次都有效,即使使用匿名函數,返回值沒有賦值給變量 –
這不正確。看到我的答案。但是,OP也許只是一個不好的例子。 –
@FelixKling:+1給你。我忽略了OP的語法,增加了更多細節。 – Sarfraz
這是一個自調用函數。你傳遞0作爲參數。這等於0
對於如因此,你的函數將返回欄下面的功能是相同的:
function foo(bar) {
return bar;
}
foo(0); // returns 0
如果你只是提供了一個壞榜樣,那麼你的問題是重複的(HTTP [什麼是圍繞一個JavaScript對象/功能/類聲明括號是什麼意思?] //stackoverflow.com/questions/440739/what-do-parentheses-surrounding-a-javascript-object-function-class-declaration-m)。 –