var a = 10; A: (function () { console.log(a); // 10 })(); /* 函数の内部で参照された変数が見つけられなかつたときは、外側のスコープを見にゆく。*/ B: (function () { console.log(a); // undefined var a = 20; console.log(a); // 20 })(); /* var 文は函数スコープの先頭で実行されるが、代入は記述された箇所で行はれる。 * つまり、B: は次のやうに書き換へられる。 */ (function () { var a = undefined; console.log(a); // undefined a = 20; console.log(a); // 20 })(); C: (function () { var a = 20; console.log(a); // 20 console.log(window.a); // 10 })(); /* グローバルスコープの変数は window のメンバである。*/ D: (function () { console.log(a); // 10 eval('var a = 20;'); console.log(a); // 20 })(); /* eval() を使ふと、変数を動的に宣言することができる。*/ E: var scope = {}; with(scope) { console.log(a); // 10 scope.a = 20; console.log(a); // 20 } /* 同じことは with 文でゞも実現できる。*/