Closureとは? - 定義時のコンテキストへの参照を持つ関数。JSでは関数を作成すると裏側でクロージャが作成され、関数がどこからも参照されなくなるとクロージャも消失する
- Callオブジェクト(Activation Object): 関数が呼び出されたときに自動的に生成されるオブジェクト。複数回呼び出されると、それごとにCallオブジェクトが生成される
- 下記の例の場合、変数cntはcreateCounterのCallオブジェクトに格納されているのでそこで変数cntは解決される
- このCallオブジェクト自体へはプログラムから直接参照・操作できず、show関数を介してのみアクセス可能
- → これがクロージャを利用して擬似的にプライベート変数を実現するテクニックのカラクリ
const createCounter = function() {
let cnt = 0;
const show = function () {
cnt = cnt + 1;
console.log(cnt);
};
return show;
};
const counter = createCounter();
counter(); // 1
counter(); // 2
counter(); // 3