正解は 1, 2 です。これはJavaScriptのクロージャ(Closure)の典型的な動作例です。クロージャとは、関数とその関数が宣言されたレキシカル環境(変数スコープ)の組み合わせのことです。内側の関数は、外側の関数(counter)の実行が完了した後でも、外側のスコープにある変数 count への参照を保持し続けます。なぜ 1, 2 になるのかcounter() を呼び出すと、新しいレキシカル環境が作られ、その中に count = 0 が存在します。返された無名関数はこの環境を「閉じ込めて(close over)」保持します。const increment = counter(); // increment は count=0 を持つ環境を参照している console.log(increment()); // count が 0→1 になり、1 を返す console.log(increment()); // count が 1→2 になり、2 を返す毎回 count がリセットされるのではなく、同じ変数を参照し続ける点がポイントです。クロージャの実務での用途クロージャはデータの隠蔽(プライベート変数の実現)、イベントハンドラでの状態保持、関数ファクトリパターンなどで広く使われます。Reactの useState の内部実装にもクロージャが活用されています。