javascript关闭的效果是什么

时间:2012-08-13 08:49:40

标签: javascript closures

我正在学习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()); 

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

3 个答案:

答案 0 :(得分:0)

工作正常。两种方法都使用闭包来包含局部变量。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

就闭包而言,语法是等价的。

然而如果您想要输入对象,则必须使用第二种语法。

使用第一种语法:

obj1 instanceof myObject === false.

使有点单身。

而第二种语法将为您提供:

obj1 instanceof myObject === true

使您的对象成为myObject的实例