JAvascript単例と閉パッケージ


単一例は設計モードであり、一度しかインスタンス化できないオブジェクト、単一例の利点を指す.
  • グローバル変数windowへの変数の露出を避けるには、ネーミングスペース、ネーミング競合の回避、クラスライブラリの書き込みなどに使用できます.jqueryは大きなネーミングスペースjQueryです.fn = jQuery.prototype = {..}
  • var ValidateUtil = {   
       checkEmail : function(){};
       checkPassword : function(){};
    }; 

    この例はwindowに対してただ1つのValidateUtilの名前の空間だけを暴露します
  • 匿名関数を実行し、パケットを閉じる特性
  •  var initLayout = (function(){    
        var layoutBox = document.getElementById("layoutId");
        layoutBox.style.width = window.document.clientWidth;
        layoutBox.style.height = window.document.clientHeight;
     })();

    この関数により、レイアウトの幅と高さを設定しました.外部では内部変数を参照できないため、関数を実行すると、変数がすぐに解放され、メモリが節約されます.
  • は変数をキャッシュし、変数を常にメモリに保存する
  • .
    var f1 = (function(){
        var i = 0;
        var out = function(){
           console.log(i);
        };
        add = function(){//    var     
            i++;
        }
        return out ;    
    }());
    var out = f1; //out   window ,       , out   i,  i        
    add();
    out(); //  i 1  i      

    閉パッケージは、匿名の関数を作成し、すぐに実行する単一の例の実装です.すべての変数と関数は1つの「閉パッケージ」にあります.
    (function(){   
       var name = "liuxg";
       var i = 0
       var f  = function(){ //           
          console.log("name="+name + " age=" + age );
       }
    })();

    関数定義をカッコで囲み、関数オブジェクトを取得し、その後のカッコはすぐに実行されます.jQueryはこのように実現しています.
    (function( window, undefined ) { ...... window.jQuery = window.$ = jQuery; //      })(window); 

    注意:大量に闭包を乱用してメモリの保存が急腾することができて、IEブラウザーの中でまたメモリの漏洩が现れるかもしれなくて、闭包を慎むべきです