0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Js スコープチェーン 深く解析

Last updated at Posted at 2024-06-23

本書はスコープチェーン詳細について、深く解析していきます。

下記のコードを見ましょう

scope_test.js
var num = 999;

function hoge() {
    function test() {
        var num = 234;
        console.log(num);
    }
    
    var num = 123;
    console.log(num);
    test();
}

hoge();
console.log(num);

hoge functionExecution Contextを分析する

image.png

考えるネタ

hoge内のconsole.log(num);は実行されたときに何か出力されるでしょう????
プログラムの知識を持っている方は当たり前123でしょうと答えるかもしれません。

どうして999が出力されないの?って考えたことはありますでしょうか?

分析:
hoge内のconsole.log(num);実行するときに、上記の図を参考に、hogeのスコープチェーンは0番目から実行され、Activation Objectnumの変数が定義されて、その値が出力されます。 例えば、Activation Objectnumの変数はないときに、順次に1番目のGlobal Objectを見て、999は出力されるでしょう。

また、Global Object、Activation Objectにはnumという変数はなかったら、どうなるの?
:grin:

www.... error:num is not defined 

続き....

test functionのExecution Contextを分析する

image.png

考えるネタ

hoge Activation Objecthoge functionExecution Contextを分析するときのActivation Objectと何か違いますでしょうか??

答え:同じです。

test functionExecution Contextは生成するときに自動的にhoge functionの成果を引き継いでくるのです

なので、test functionはhoge Activation ObjectGloba Activation Objectを持っていることで、変数を参照することができるのです。

※こちらの知識はjsのクロージャを理解するための重要ポイントなので、覚えていきましょう。

以上、不明点があれば、コメントを頂ければと思います

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?