2011-03-10 11 views
0

ケースAこれは、より良いjavascriptの練習ですか?

(function(){ 

    //this is to access this a property "PublicItem" from outside this closure 
    window.PublicItem=function(){ 
     //codes 
    } 

    //internal variables 
    var _varA,_varB,_varC,_varD; 

    //internal functions 
    function _internalFunc1(){} 
    function _internalFunc2(){} 
    function _internalFunc3(){} 

    })(); 

ケースB

(function(){ 

    //this is to access this a property "PublicItem" from outside this closure 
    window.PublicItem=function(){ 
     //codes 
    } 

    //this variable will hold all internal variables and methods 
    var _global={}; 

    //internal variables to hold all other internal variables 
    _global._varA="something for a"; 
    _global._varB="something for b"; 
    _global._varC="something for c"; 

    //internal functions 
    _global._internalFunc1=function(){} 
    _global._internalFunc2=function(){} 
    _global._internalFunc3=function(){} 

    })(); 

2例との違いは、場合、私は、必要があるとして、私は、変数/関数などの多くのように作成したです。そしてcase2私は_globalという名前の単一の変数を作成しました。内部変数/関数を作成するためには、_globalというプロパティを作成しました。私はあなたに、メモリとパフォーマンスの面で特別に優れた方法を教えてください。他のパラメータについてもコメントすることができます。

+0

oopsはちょっとした間違いを修正しました。 –

+0

あなたの無名関数式は構文的に間違っています。 '(function(){/ * ... code here ... * /})();' –

+0

@andyと@felixのようになります。 –

答えて

1

ケース2は、変数を使用するたびにインタープリタが2つのステップ(1:プロパティを解決する、2:値にアクセスする)を行う必要があるため、少し遅くなります。しかし、その違いは重要ではありません。このケースでは、入力が少なくて済むという理由だけでcase1が好ましいと思います。

ところで、なぜあなたは「_グローバル」と呼んでいますか?つまり、を私的に変数と関数を保持することをお勧めしますか?これがアンダースコアの理由です。

+0

はい理由はそれは強調しています。 –

+0

http://jsperf.com/collected-or-multiple/2 –

+0

Case1は私のブラウザ(MacOSXのChrome)で高速ですが、テストは実際には実例ではありません。作成をテストするだけで、プロパティのアクセスや変更はテストされません。より速いものをテストするか、 '_var'を呼び出すか、 '_global._var'にアクセスする必要があります。 – Relax

関連する問題