2009-09-03 19 views
8

Aquí es un códigoJavascript cierre

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

collection.set(1000); 

Por qué collection.y != collection.get()?

+0

quieres decir después de llamar a "set (1000)"? – Aziz

Respuesta

4

no está configurando la colección y cuando se llama collection.set (1000)

3

Debido y almacenará el valor 0, y se no leerlo desde x. Mientras que get() leerá la variable x cada vez que la llame.

3

bien el objeto que está configurando la colección para que luzca así:

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

no hay x propiedad para almacenar el estado en (edit: para ser justos, será creado, pero Y todavía tiene un cierre de el valor 0 por lo que no se actualizará), ¿qué más esperabas? Reemplace x con y y debería estar bien.

+0

está muy claro ahora, gracias –

8

y no es un "puntero" a x. Cuando se crea el cierre simplemente copió el valor de x en ese momento en y, y cada vez que llame get()/set() que funcionan sólo en x (sin relación con 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()) 
Cuestiones relacionadas