2011-03-10 48 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(){} 

    })(); 

兩種情況之間的區別在於情形A我已經多達變量/函數創建爲我需要。並在case2我創建了一個名爲_global的變量,並創建任何內部變量/函數我已經使它的屬性_global。我想讓你建議我在記憶和表現的意義上哪種方式更好,你也可以評論任何其他參數。

+0

oops只是犯了一個小錯誤糾正它! –

+0

您的匿名函數表達式在語法上是錯誤的。他們應該看起來像'(function(){/ * ... code here ... * /})();' –

+0

@andy和@felix,只是糾正它。 –

回答

1

case2會稍微慢一點,因爲解釋器每次使用變量時都必須進行兩個步驟(1:解析屬性,2:訪問值)。但差異不大。在這種情況下,我認爲case1更好,因爲它需要更少的打字。

順便說一句,你爲什麼要調用'_global'那種方式?我的意思是,它支持私人變量和功能,對不對?這是下劃線的原因。

+0

是的原因下劃線是。 –

+0

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

+0

Case1在我的瀏覽器(MacOSX上的Chrome)上速度更快,但測試並沒有真正的說明。它只測試創建,而不是訪問或修改屬性。你應該測試什麼更快:訪問'_var'或訪問'_global._var'。 – Relax