本書はスコープチェーン詳細について、深く解析していきます。
下記のコードを見ましょう
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 function
のExecution Context
を分析する
考えるネタ
hoge
内のconsole.log(num);
は実行されたときに何か出力されるでしょう????
プログラムの知識を持っている方は当たり前123
でしょうと答えるかもしれません。
どうして999
が出力されないの?って考えたことはありますでしょうか?
分析:
hoge
内のconsole.log(num);
実行するときに、上記の図を参考に、hoge
のスコープチェーンは0番目から実行され、Activation Object
にnum
の変数が定義されて、その値が出力されます。 例えば、Activation Object
にnum
の変数はないときに、順次に1
番目のGlobal Object
を見て、999
は出力されるでしょう。
また、Global Object、Activation Object
にはnum
という変数はなかったら、どうなるの?
www.... error:num is not defined
続き....
test functionのExecution Contextを分析する
考えるネタ
hoge Activation Object
はhoge function
のExecution Context
を分析するときのActivation Object
と何か違いますでしょうか??
答え:同じです。
test function
のExecution Context
は生成するときに自動的にhoge function
の成果を引き継いでくるのです
なので、test functionはhoge Activation Object
とGloba Activation Object
を持っていることで、変数を参照することができるのです。
※こちらの知識はjsのクロージャを理解するための重要ポイントなので、覚えていきましょう。
以上、不明点があれば、コメントを頂ければと思います