2012-08-13 46 views
0

我正在學習javascript關閉,我已經閱讀了關於關閉的很多例子,但我仍然困惑爲什麼我們必須使用閉包?什麼效果的javascript關閉

這裏有一個例子,我從「好的部分」

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

    return { 
     increment: function(inc){ 
      value += inc; 
     }, 
     getValue: function(){ 
      return value; 
     } 
    } 

}; 
    var obj1 =myObject();  
    document.write(obj1.getValue()); //0 
    obj1.increment(10); 
    document.write(obj1.getValue());//10 

複製,但我不知道爲什麼我們不應該寫這樣呢?

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


    this.increment= function(inc){ 
      value += inc; 
    }, 
    this.getValue= function(){ 
      return value; 
    } 

    }; 
    var obj1 =new myObject(); 
    document.write(obj1.getValue()); 
    obj1.increment(10); 
    document.write(obj1.getValue()); 

第一次問問題,英文不好,原諒我!

+0

實例也這樣說的:http://javascript.crockford.com/private.html – jfriend00 2012-08-13 08:54:40

回答

0

就閉包而言,語法是等價的。

但是如果您希望鍵入對象,則必須使用第二種語法。

隨着第一語法,你將有:

obj1 instanceof myObject === false. 

使其成爲單身。

而第二語法會給你:

obj1 instanceof myObject === true 

讓您的對象myObject的

0

工作正常。這兩種方法都使用閉包來包含局部變量。

0

當您需要訪問不再處於範圍內的對象內部的值時,閉包很有用。當您使用Good Parts中的代碼時,雖然函數myObject已返回,但每次使用increment時變量value都會增加。