Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

以前、投稿した

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

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

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

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

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

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

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

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

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした