2009-09-03 3 views
8

Вот кодJavascript закрытие

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

collection.set(1000); 

Почему collection.y != collection.get()?

+0

Вы хотите сказать, что после вызова "set (1000)"? – Aziz

ответ

4

Вы не ставим коллекции у при вызове collection.set (1000)

3

Поскольку у будет хранить значение 0, а нечитать из х. В то время как get() будет читать переменную x каждый раз, когда вы ее вызываете.

3

Ну объект вы настраиваете коллекцию выглядит следующим образом:

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

нет x свойства для хранения состояния в (редактировать: чтобы быть справедливым он будет получать создан, но у еще есть замыкание на значение 0 так не будет обновлено), так что еще вы ожидали? Замените x на y, и вы должны быть в порядке.

+0

сейчас очень ясно, спасибо –

8

у не «указатель» к х. При создании закрытия вы просто скопировали значение х в этот момент в у, и каждый раз, когда вы звоните Get()/множества() вы работать только на х (не имеет никакого отношения к у)

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()) 
Смежные вопросы