* コールバック関数はグローバルスコープで実行される [#dc5f54ce]
var Foo = function () {
this.num = 1;
this.alertNum = function () { alert(this.num); }
this.alertNumLater = function () { setTimeout(this.alertNum, 1000); }
};
var num = 2;
var foo = new Foo;
foo.alertNum(); // 1
foo.alertNumLater(); // 2
showNumLater()から呼ばれるコールバック関数 showNum()、すなわち function () { alert(this.num); } はグローバルスコープで実行される。よって、this.numはグローバルオブジェクトであり、this.numはFoo.numではない。
以下の例ではグローバルのfoo()が呼ばれる。
function foo() { console.log("1"); }
function bar() {
function foo() { console.log("2"); };
setTimeout("foo()", 1000);
}
bar(); // 1