2012-06-18 13 views
9

可能性の重複:
Difference between (function(){})(); and function(){}();自己実行機能

私は少し良くはJavaScriptの機能のいくつかを理解しようとしています。

var obj = (function() { 
    var value = 0; 

    return { 
     increment: function(inc) { 
      value += typeof inc === "number" ? inc : 1; 
     }, 
     getValue: function() { 
      return value; 
     } 
    } 
})(); 

が、この例ではから取られJavaScript - The Good Partsで、それはのようなので、丸括弧なしで上記の自己実行機能を持っている:The Definitive JavaScriptでは、自己実行機能がそうのようなそれら丸括弧を持つべきであると述べています:これらの例の

var obj = function() { 
    var value = 0; 

    return { 
     increment: function(inc) { 
      value += typeof inc === "number" ? inc : 1; 
     }, 
     getValue: function() { 
      return value; 
     } 
    } 
}(); 

の両方が私のために働くが、私は私が知っておくべき機能に違いがあった場合にはお願いしたいと思いました。私はこれがあまりにも簡単ではないことを願っています。私はちょうど確信したかった。

ありがとうございます。

編集:ロブ・Wとして

は、件名に別のスレッドがあり、指摘しています。 This is an excellent blog regarding this issueは、他の投稿からリンクされていました。

+4

この場合、どちらも同等です。 'var obj ='を省略すると、後者はエラーを投げます。したがって、バイトが高価にならない限り、#1に固執する。 –

+0

大変感謝しています。ちょうど興味があることに興味があります:どのような状況で私は 'var obj ='を省略しますか?これはオブジェクトをトップレベルオブジェクトに戻しますか?乾杯。 – Joe

+1

@Joe関数を実行したい(つまり、副作用が欲しい)場合は 'var obj'を省略しますが、値を返さない場合や、戻り値が何であるか気にしない場合は' var obj'を省略します。 – Alnitak

答えて

13

あり、この場合のいずれかの違いはありませんが、それはが付いているためのみ:それがなければ

var obj = ... 

通訳ができるように、追加の括弧を必要とするので、唯一の最初のバージョンは、正しいですfunctionを関数の式として正しく解析するには、関数としてではなく、の宣言を正しく解析する必要があります。

関数を実行したい(つまり、副作用が必要な)場合は、もちろんvar objを省略しますが、値を返さないか、戻り値が何であるか気にしません。

1

この例では機能的な違いはありませんが、かっこで表示するのがはるかにわかりやすいと思います。どのようにそれが括約書なしでスコープされているかあなたはどのように知っていますか?それは揚げられていますか?対象者のThis is a brilliant thread。余談

JSLintは、「ファンクション文は呼び出し可能ではありません括弧内全体の関数呼び出しをラップします。。」と文句を言うだろう私は厳密モードで動作していないブラウザパーサの多くは、一般的にそれを通過させると思いますが、それに頼らない方が良いです。

3

はJavaScript:

var obj = (function() { 
    var value = 0; 

    return { 
     increment: function(inc) { 
      value += typeof inc === "number" ? inc : 1; 
     }, 
     getValue: function() { 
      return value; 
     } 
    }; 
}()); 

だから、式全体が括弧内にある:良い部品は、このように見える彼の例を更新したダグクロックフォード、によって書かれました。

外括弧は、必須ではないが、意図的に自己実行する機能であることを開発者に明確にするという考え方です。したがって値は読みやすさです。

関連する問題