我讀In JavaScript, what is the advantage of !function(){}() over (function() {})()?然後打我,爲什麼使用:爲什麼使用(function(){})()或!function(){}()?
(function(){})()
或!function(){}()
而不是僅僅function(){}()
?
有什麼具體原因嗎?
我讀In JavaScript, what is the advantage of !function(){}() over (function() {})()?然後打我,爲什麼使用:爲什麼使用(function(){})()或!function(){}()?
(function(){})()
或!function(){}()
而不是僅僅function(){}()
?
有什麼具體原因嗎?
這取決於其中你寫這個。 function(){}()
本身會產生語法錯誤,因爲它被評估爲函數聲明和那些需要名稱。
通過使用括號或非運算符,可以強制將其解釋爲函數表達式,它們不需要名稱。
在無論如何將其視爲表達式的情況下,您可以省略括號或運算符。
我猜你會問,爲什麼使用:
var fn = (function(){}());
與:
var fn = function(){}();
對我來說,答案很簡單,往往在RHS功能是漫長的,它不是,直到我去底部,並看到關閉()
,我意識到我一直在閱讀一個函數表達式而不是函數分配。
完整的解釋在Peter Michaux的An Important Pair of Parens。
RobG的答案略有差異。
許多腳本在一個函數中包含整個程序,以確保適當的範圍。然後該函數立即使用最後的雙括號運行。但是,這與定義可在頁面中使用但最初不能運行的功能的程序略有不同。
這兩種情況之間的唯一區別是最後兩個字符(添加了雙括號)。由於這些可能是非常長的程序,因此最初的括號表示「將立即運行」。
該程序是否需要運行?不。對於查看代碼並試圖理解它的人有用嗎?是。
[爲什麼括號用來包裝javascript函數調用?](http://stackoverflow.com/questions/6645766/why-are-parenthesis-used-to-wrap-a-javascript-function-呼叫) –