JavaScriptのクロージャ
では、クロージャ(closure)の概念を学びましょう。実は、あなたはすでにこの概念を知っています。あとは正しい専門用語を知るだけです。
つまり、クロージャとは、関数と、その関数がアクセス可能なすべての外部変数をまとめたものです。別の言い方をすれば、クロージャは関数とそのレキシカル環境を一緒にしたものです。
JavaScriptでは、多くの場合「関数のクロージャ」と言うとき、その関数そのものではなく、その外部変数のことを意味します。ある関数が自分のレキシカル環境から変数を取得する場合、「変数はクロージャから取られている」と言います。
前のレッスンで作成したコードを思い出してみましょう:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // 1を出力
この場合、関数 func は変数 num の値をクロージャから取得していると言えます。また、関数 func は変数 num の値をクロージャに保存しているとも言えます。