クロージャーの前にスコープとは
クロージャーを語るにはまず、スコープについて知っておく必要があります
スコープには以下の種類があります
- グローバルスコープ
- 最高階層で宣言されその変数はどこからでも使用出来る
- ローカルスコープ
- グローバルスコープ以外の変数
- 関数スコープとブロックスコープに分けられる
- 関数スコープ
- 関数の中で宣言される変数で関数の中でしか使用出来ない
- ブロックスコープ
{}で閉じられたブロックの中で宣言された変数で{]の中でしか使用出来ない
クロージャーとは
上記のスコープを踏まえて
クロージャーの使用例を↓に記述します
const counter = () => {
let x = 0;
return () => {
return x++;
}
}
実行すると下記にようになります
const ct1 = counter();
const ct2 = counter();
console.log(ct1()); // 0
console.log(ct1()); // 1
console.log(ct1()); // 2
console.log(ct2()); // 0
クロージャーを使用することで意図せず変数が書き変わってしまうことが防げます。