グローバル名前空間でローカル変数を定義すると、同じ名前のインスタンス変数によって上書きされます。
var outerVar;
outerVar = 'outerVar';
this.outerVar = 'thisOuterVar';
console.log(outerVar); // thisOuterVar
ただし、関数内では同じことは起こりません。
var fun;
fun = function() {
var innerVar;
innerVar = 'innerVar';
this.innerVar = 'thisInnerVar';
return console.log(innerVar); // innerVar
};
fun();
このコードは Firebug で実行されました。
this.constructor // Window { }
ノードの下で同じコードを実行すると、this.constructor
is[Function: Object]
は意味のある「thisOuterVar」ではなく「outerVar」を返します。
ウィンドウの下で動作が異なるのはなぜですか?