0

私はjavascriptクロージャを学んでいます、クロージャについて多くの例を読みましたが、なぜクロージャを使用しなければならないのかまだ混乱していますか?

これが「TheGoodParts」からコピーした例です

 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

それはうまくいきます。どちらのメソッドも、クロージャを使用してローカル変数を格納します。

于 2012-08-13T08:55:35.743 に答える
0

クロージャは、スコープ内にないオブジェクト内の値にアクセスする必要がある場合に役立ちます。The Good Partsのコードを使用している場合、関数は返されますが、変数valueは使用するたびにインクリメントされます。incrementmyObject

于 2012-08-13T08:57:24.727 に答える
0

クロージャに関する限り、構文は同等です。

ただし、オブジェクトを入力する場合は、2番目の構文を使用する必要があります。

最初の構文では、次のようになります。

obj1 instanceof myObject === false.

一種のシングルトンにしています。

一方、2番目の構文では次のようになります。

obj1 instanceof myObject === true

オブジェクトをmyObjectのインスタンスにする

于 2012-08-13T10:24:08.790 に答える