LoginSignup
3
2

More than 5 years have passed since last update.

クロージャに関する重要な点をまとめておきます。(読書メモ)

Last updated at Posted at 2018-02-12

以前、投稿した

JavaScriptのすべての関数はクロージャを定義します。(読書メモ)

に続き、以下、徹底マスター JavaScriptの教科書 「第8章 関数」からの引用です。

例 8-7 カウンタ関数を作る関数(無名関数版)

function makeCounter() {
    var count = 0;
    return function() {
        return count++;
    };
}

ここで、クロージャに関する重要な点をまとめておきます。

クロージャ理解のポイント

  • 外側の関数を呼んだときに、その関数のcallオブジェクトと入れ子の関数の関数オブジェクトが
    生成され、入れ子の関数の定義するクロージャが生成されます。つまり、外部関数はクロージャを
    生成するファクトリ関数と見なせます。
      

  • 外側の関数の callオブジェクトはクロージャの内部状態で、外側の関数が呼ばれるたびに異なる内部状態が生成されます。
     

  • 入れ子の関数の関数オブジェクトが存在している限りは、外側の関数のcallオブジェクトは存在し続けます。これは、外側の関数の関数オブジェクトが消失しても存続します。
     

  • クロージャの内部状態(外側の関数のローカル変数)は、外側から隠蔽されており、内側の関数からのみアクセスできます。

 
この本から前回引用したときにも書きましたが、個人的な感想として、
この本を読んでいると、JSのインタプリタのソースを読みたくなります。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2