2016-07-24 14 views
1

私は何か非常に基本的なことを知っています。しかし、何が間違っているのか分からないのですか?なぜJavaScriptクローズが返されるのが未定義

<!DOCTYPE html> 
<html> 
<body> 

<p>A function can access variables defined inside the function:</p> 

<button type="button" onclick="alert(makeMyCounter.increment)">Click Me!</button> 

<p id="demo"></p> 

<script> 
    var makeMyCounter = function() { 
     var privateCounter = 0; 


     return { 
      increment : function() { 
       privateCounter += 1; 
      }, 
      decrement : function() { 
       privateCounter += -1; 
      } 
     } 
    }(); 


</script> 

</body> 

なぜprivateCounterが未定義に戻っていますか?しかし、ブラウザでデバッグすると、1に割り当てられます。

答えて

2

incrementに新しい価値のリターンprivateCounterを必要とdecrement場合は、適切にそのようにそれを使用するメソッドを呼び出すために、プロパティとしてメソッド参照を使用している:

makeMyCounter.increment() 

次の事メソッドでは返されないので、未定義です。返品を追加:

return { 
     increment : function() { 
      return privateCounter += 1; 

     }, 
     decrement : function() { 
      return privateCounter += -1; 
     } 
    } 
2

privateCounterは何も返されません。

incrementは関数ですが、その後には()を入れなかったため、関数を呼び出すことはなく、関数を文字列に変換した結果を警告します。

alert(makeMyCounter.increment());とすると、returnステートメントがないため、undefinedが返されます。

1

関数を実行すると、その値は増えますが、return文はありません。

あなたの関数にreturn文がない場合は、デフォルトでundefinedが返されます。

あなたが機能

return { 
     increment : function() { 
      privateCounter += 1; 
      return privateCounter; 
     }, 
     decrement : function() { 
      privateCounter += -1; 
      return privateCounter; 
     } 
    } 
関連する問題