JavaScriptのクロージャ

では、クロージャ(closure)の概念を学びましょう。実は、あなたはすでにこの概念を知っています。あとは正しい専門用語を知るだけです。

つまり、クロージャとは、関数と、その関数がアクセス可能なすべての外部変数をまとめたものです。別の言い方をすれば、クロージャは関数とそのレキシカル環境を一緒にしたものです。

JavaScriptでは、多くの場合「関数のクロージャ」と言うとき、その関数そのものではなく、その外部変数のことを意味します。ある関数が自分のレキシカル環境から変数を取得する場合、「変数はクロージャから取られている」と言います。

前のレッスンで作成したコードを思い出してみましょう:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

let func = test();
func(); // 1を出力

この場合、関数 func は変数 num の値をクロージャから取得していると言えます。また、関数 func は変数 num の値をクロージャに保存しているとも言えます。