JavaScriptにおけるローカルカウンター変数
次のコードを考えてみましょう:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
test()(); // 1 を出力
test()(); // 1 を出力
なぜ常に数字 1 が出力されるのでしょうか?
これを理解するために、コードを別の書き方に
書き換えてみましょう:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
let func1 = test(); //!! 1つ目の関数
func1(); // 1 を出力
let func2 = test(); //!! 2つ目の関数
func2(); // 1 を出力
つまり、test()() という形での関数 test の
呼び出しは、それぞれ独自のクロージャを持つ関数を
生成し、その関数を即座に呼び出します。
コードを実行せずに、コンソールに何が 出力されるかを判断してください:
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
func()();
func()();
func()();
コードを実行せずに、コンソールに何が 出力されるかを判断してください:
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
let test = func;
test()();
test()();
test()();