実行時に異なる結果を返す次の 2 つのカウンター関数があります。
最初のスニペットでは、counter 関数が変数 letsCount に割り当てられており、関数を実行すると counter 関数の var カウントが更新されるように見えます。
ただし、2 番目のスニペットでは、関数を直接実行してもカウント変数は更新されません。
結果が異なる理由と、関数を返す関数が変数に割り当てられるとどうなるかを説明してください。
スニペット 1
function counter() {
var count = 0;
return function() {
console.log(count++);
}
}
var letsCount = counter();
letsCount(); // 0
letsCount(); // 1
letsCount(); // 2
スニペット 2
function counter() {
var count = 0;
return function() {
console.log(count++);
}
}
counter()(); // 0
counter()(); // 0
counter()(); // 0