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 文でゞも実現できる。*/