【问题标题】:Javascript closureJavascript 闭包
【发布时间】:2009-09-03 19:34:33
【问题描述】:

这是代码

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()

【问题讨论】:

  • 你的意思是在你调用“set(1000)”之后?

标签: javascript closures


【解决方案1】:

y 不是指向 x“指针”。创建闭包时,您只需将当时 x 的值复制到 y 中,并且每次调用 get()/ set() 你只对 x 进行操作(与 y 无关)

【讨论】:

    【解决方案2】:

    当您调用 collection.set(1000) 时,您没有设置集合 y

    【讨论】:

      【解决方案3】:

      因为 y 将存储值 0,并且将x 读取它。而 get() 会在每次调用时读取变量 x

      【讨论】:

        【解决方案4】:

        嗯,您正在设置集合的对象如下所示:

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

        没有x 属性来存储状态(编辑:公平地说,它会被创建,但 y 仍然对 0 值有一个闭包,因此不会更新),那么您还期待什么?把 x 换成 y 就可以了。

        【讨论】:

          【解决方案5】:
          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())
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-06-14
            • 2011-07-27
            • 2022-07-06
            • 2016-03-07
            • 2013-04-08
            • 2010-09-25
            相关资源
            最近更新 更多