web-dev-qa-db-ja.com

(...())対(...)()JavaScriptクロージャ

私はこれがばかげていることを知っていますが、これの間には違いがあります:

(function() {  
    var foo = 'bar';  
})();

この?

(function() {  
    var foo = 'bar';  
}());

JSLintMove the invocation into the parens that contain the functionを指示しますが、その必要はないと思います。

編集:答えはクールすぎます。 ~functionJSHint 代替、jQueryの(/***/)();の設定、およびCrockfordの説明! 「同じものだ」という答えが返ってくると思った。
あなたたちは賛成票を通して最良のものを決定し、私はそれをチェックします。

63
Camilo Martin

違いはありません。どちらも、JavaScriptパーサーに関数を宣言ではなくとして処理させる有効な方法です。

ご了承ください +および!も機能し、サイズの文字を保存するためにミニファイアによって使用されることがあります。

+function() {  
    var foo = 'bar';  
}();

!function() {  
    var foo = 'bar';  
}();

[〜#〜]編集[〜#〜]

@copyが指摘しているように、完全を期すために、~および-も機能します。

-function() {  
    var foo = 'bar';  
}();

~function() {  
    var foo = 'bar';  
}();
49
Adam Rackis

そのJSLint違反が存在するのは、Douglas Crockfordが、括弧の外側のバージョンが「犬のボール」のように見えると言っているためです。

彼がそれについて話しているのを聞くことができます このビデオ

私たちが話しているのは呼び出し全体であるため、それは間抜けに見えると思いますが、これらのものは、犬のボールのように見えます。

彼は、読者が理解できるようにする内の括弧は、ステートメント全体が宣言ではなく関数式であることを示唆しています。

38
Rob Hruska

いいえ、違いはないと思います。私は個人的に前者を好みます(そしてjQueryet。al。も同意しているようです)が、どちらも私がテストしたすべてのエンジンで同じように機能します。

また、JSLintは少し厳しすぎる場合があります。 JSHint その点では少し良いかもしれません。

10
Ry-