— y2sunlight 2021-04-05
関数の引数または戻り値として、関数を使用できる関数のことを高階関数と呼びます。
クロージャとは、外側のローカル変数を参照している関数内関数の事です。
通常、クロージャは関数の戻り値として使用されるので、高階関数の内部に存在します。
即ち、クロージャとは高階関数内のローカル変数を参照している関数内関数であり、高階関数の戻り値として設定されます。
function higher(n) {
var count = n;
function closure() {
return count++;
}
return closure;
}
var myClosure = higher(100);
console.log(myClosure()); // 100
console.log(myClosure()); // 101
console.log(myClosure()); // 102
higher() はクロージャ(closure())を返す高階関数で、higher() のローカル変数(count)はクロージャが存在し続ける限り参照され続ける(捉えられ続ける)。この様にクロージャはオブジェクトの様に振舞います。