2013-10-23 56 views
4

有人可以解釋這些封閉區別的區別嗎?有區別嗎?我以前從未見過第二個例子(括號裏面)。帶括號的封閉區域與外部區域之間的差異

(function(a, b) { 
    //... 
})(x, y); 

// Parentheses inside 
(function(a, b) { 
    //... 
}(x, y)); 

在這裏,這些關閉之間有區別嗎?有沒有會有區別?

+0

這不是封閉,這是[IEFE](http://benalman.com/news/2010/11/immediately-invoked-function-expression/)。它可能會返回一個閉包,但在這裏沒有關係。 – Bergi

+0

[自動執行匿名JavaScript函數的括號的位置?]的確切副本(http://stackoverflow.com/questions/3384504/location-of-parenthesis-for-auto-executing-anonymous-javascript-functions)或[ (function(){...}())之間有區別嗎?和(函數(){...})();?](http://stackoverflow.com/questions/3783007/is-there-a-difference-between-function-and-function) – Bergi

+0

@Bergi感謝您的澄清和鏈接。看來我需要做更多的閱讀。 – matthewpavkov

回答

1

不。在兩種情況下它們都完全一樣。

將函數包裝在括號中會發生什麼情況是從函數聲明到可以立即調用的函數表達式。

無論你在括號內還是後面調用​​它都沒有關係。 「對話」已經發生,因此你可以調用它。

而實際上,你可以做到這一點

FOO.Bar = function() { 
    return 123; 
}(); 

以上已經是一個函數表達式,因爲你是在FOO分配一個匿名函數的性質Bar

+0

雅各布,這兩個方法不會更好,因爲他們可以放在腳本的任何地方,仍然可以在封閉之上或之下引用數據。 - 只是問... – blackhawk

+0

嗯,這取決於。他認爲他不會將前兩項與後兩項進行比較。無論如何,這是沒有道理的。第二個應該返回一個可以賦值給FOO.Bar的值。前兩個不表示返回任何值。通常只是爲了確定某些東西。 –

+0

我並不打算比較前2個代碼示例與第2個示例。感謝您的信息。 – matthewpavkov