私は JavaScript でスコープをいじっていますが、配列から関数を呼び出すときに遭遇したことに興味がありました。以下の例では、3 つの異なるスコープを使用しています。1 つは foobar というオブジェクトにバインドされ、もう 1 つは window にバインドされ、3 つ目は実際に関数自体を参照します。関数のスコープがグローバル ウィンドウ オブジェクトではなく、それ自体に限定されている理由が気になります。配列アクセスは関数呼び出しそのものなのでストアド関数はローカルスコープにあるからでしょうか?
var foobar = {
doWork: function() {
console.log('doing some work...');
console.log(this);
}
}
foobar.doWork(); // `this` will refer to foobar
var doWorkClone = foobar.doWork;
doWorkClone(); // `this` will refer to window
var workClones = [];
workClones.push(foobar.doWork);
workClones[0](); // `this` will refer to the doWork function itself