本書はスコープチェーン詳細について、深く解析していきます。
下記のコードを見ましょう
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のクロージャを理解するための重要ポイントなので、覚えていきましょう。
以上、不明点があれば、コメントを頂ければと思います

