0

我正在学习 javascript 闭包,我已经阅读了很多关于闭包的示例,但我仍然对为什么我们必须使用闭包感到困惑?

这是我从“The Good Parts”复制的一个例子

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

第一次问问题,英语不好,见谅!

4

3 回答 3

0

As far as the closure is concerned the syntax are equivalent.

However if you want your object to be typed you must use the second syntax.

With the first syntax you will have:

obj1 instanceof myObject === false.

Making it kind of a singleton.

Whereas the second syntax will give you :

obj1 instanceof myObject === true

Making your object an instance of myObject

于 2012-08-13T10:24:08.790 回答
0

这很好用。这两种方法都使用闭包来包含局部变量。

于 2012-08-13T08:55:35.743 回答
0

当您需要访问不再在范围内的对象内的值时,闭包很有帮助。当您使用 The Good Parts 中的代码时,value每次使用时变量都会递增increment,尽管函数myObject已返回。

于 2012-08-13T08:57:24.727 回答