まず、クロージャの定義から始めましょう。クロージャは、関数とその関数が作成されたレキシカルスコープの組み合わせです。クロージャは、外部のスコープにある変数を参照し続ける関数です。これにより、関数内で定義された変数が関数の実行後も保持されることが可能となります。
クロージャの一般的な使用例として、プライベート変数の作成があります。例えば、以下のコードをご覧ください。
function counter() {
let count = 0;
return function() {
count++;
console.log(count);
}
}
const increment = counter();
increment(); // 結果: 1
increment(); // 結果: 2
上記の例では、counter
関数内で定義された count
変数にアクセスするクロージャが作成されています。counter
関数が実行されるたびに、新しいクロージャが生成されますが、それぞれのクロージャは同じ count
変数を共有します。このため、increment
関数を呼び出すたびに、count
の値がインクリメントされていきます。
クロージャを活用することで、状態を保持する関数や、関数内でのデータのキャプチャなど、さまざまな応用が可能です。また、クロージャは高階関数と組み合わせて使用することもできます。以下は、クロージャと高階関数を組み合わせた例です。
function multiplier(factor) {
return function(number) {
return number * factor;
}
}
const double = multiplier(2);
console.log(double(5)); // 結果: 10
上記の例では、multiplier
関数がクロージャを返しています。multiplier
関数に引数として渡された factor
の値がクロージャ内で保持され、返された関数はその値を利用して数値を倍にする操作を行います。
このように、クロージャはJavaScriptにおいて強力な概念であり、様々なシナリオで活用することができます。クロージャを理解し、適切に活用することで、より柔軟で効率的なコードを書くことができます。