2009-09-03 34 views
8

Dưới đây là một mãJavascript đóng cửa

var collection = (function(){ 
       var x = 0; 
       return { 
        y : x, 
        get : function(){return x}, 
        set : function(n) { x = n}       
       } 
       }()); 

collection.set(1000); 

Tại sao collection.y != collection.get()?

+0

có nghĩa là sau khi bạn gọi "set (1000)"? – Aziz

Trả lời

4

Bạn chưa thiết lập bộ sưu tập y khi bạn gọi collection.set (1000)

3

y sẽ lưu trữ các giá trị 0, và sẽ không đọc nó từ x. Trong khi get() sẽ đọc biến số x mỗi lần bạn gọi nó.

3

Vâng đối tượng bạn đang thiết bộ sưu tập để trông như sau:

{ 
    y : 0, 
    get : function(){return x}, 
    set : function(n) { x = n}       
} 

không có x tài sản để lưu trữ nhà nước (sửa: phải công bằng nó sẽ được tạo ra, nhưng y vẫn còn đóng cửa trên giá trị 0 sẽ không được cập nhật), vì vậy bạn còn mong đợi điều gì nữa? Thay thế x với y và bạn nên ok.

+0

bây giờ rất rõ ràng, cảm ơn –

8

y không phải là một "con trỏ" để x. Khi tạo ra việc đóng cửa bạn chỉ cần sao chép giá trị của x lúc đó vào y, và mỗi khi bạn gọi get()/set() bạn chỉ hoạt động trên x (không liên quan đến y)

0
function person(name,age){ 

    this.name=name; 
    this.age=age; 

    //closers 
    this.sayHi=function(){ 

     return this.name+" say Hi" 

    } 

} 

var p=new person("Ramesh",23); 

alert(p.sayHi()) 
Các vấn đề liên quan