レッスンに戻る

カウンタは独立していますか?

重要性: 5

ここで2つのカウンタを作ります: 同じ makeCounter 関数を使って countercounter2 を作ります。

それらは独立していますか?2つ目のカウンタは何が表示されるでしょうか? 0,1 or 2,3 or その他?

function makeCounter() {
  let count = 0;

  return function() {
    return count++;
  };
}

let counter = makeCounter();
let counter2 = makeCounter();

alert( counter() ); // 0
alert( counter() ); // 1

alert( counter2() ); // ?
alert( counter2() ); // ?

答え: 0,1.

関数 countercounter2 は異なる makeCounter の呼び出しで作られています。

そのため、それらは独立した外部のレキシカル環境を持っており、それぞれ独自の count を持ちます。