クロージャとは
クロージャは、関数が外側のスコープの変数にアクセスできるという性質のこと。
これにより、関数に状態をもたせるができる。
例 1: 基本的なクロージャ
function outer() {
let outerVariable = 'outer function';
function inner() {
console.log(outerVariable);
}
return inner;
}
const myClosure = outer();
myClosure(); // "outer function" が出力される
inner()
関数が外側のスコープのouterVariable
にアクセスできている。
例 2: クロージャを使ったカウンタ
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
createCounter
関数が返す関数(無名関数)は、外部のcount
変数を「覚えて」いる。
これにより、createCounter
関数に状態を持たせることができる。
クロージャのメリット
データのプライバシーとカプセル化: クロージャを使用すると、外部から直接アクセスできない「プライベート変数」を作成できる。これによりグローバル変数を減らし、コードの複雑性を減らすことができる。