4

以下のコードで、複数の呼び出しが呼び出されるたびcounterに値が増加する理由を誰かが説明してくれませんか?i

私の理解では、変数を介して が呼び出されるたびに を具体的に設定i = 0;すると、を 0 にリセットする必要があります。なぜそうならないのか理解できません。makeCountermakeCountercounteri

function makeCounter() {
  // `i` is only accessible inside `makeCounter`.
  var i = 0;

  return function() {
    console.log( ++i );
  };
}

// Note that `counter` and `counter2` each have their own scoped `i`.

var counter = makeCounter();
counter(); // logs: 1
counter(); // logs: 2
4

2 に答える 2

1

makeCounter が呼び出されるたびに […]iにリセットする必要があります0

それは正しい。

makeCountercounter変数を介して呼び出されます

いいえ、ちがいます。によって返される無名関数は、makeCounterで呼び出されcounter()ます。makeCounter一度だけ呼び出され、その結果counter変数に代入されました。

countercounter2それぞれに独自のスコープがあることに注意してくださいi

そうでしょうね、はい。ただし、あなたの例は不完全です:

var counter = makeCounter();
counter(); // logs 1
var counter2 = makeCounter();
counter2(); // logs 1 again!
counter(); // still logs 2
counter2(); // logs 2
于 2013-07-01T14:41:06.767 に答える