this 常に1は、関数オブジェクトが呼び出されたオブジェクトに評価されます。windowそれが「何も呼び出されなかった」(または のプロパティである) 場合は に評価されwindowます。
(は変数でthis はないため、クロージャで閉じられていないことに注意してください!これが、変数orthisによってしばしば知られる「正しい」値を取得するためにクロージャが必要になる場合がある理由です。)selfthat_this
例えば:
function f () { return this; }
var a = {f: f}
var b = {f: f}
a.f() === a // true
b.f() === b // true
f() === window // true
変数を使用して現在のバインディングを作成する例(外側の関数が呼び出された時点) this:
test = (function() {
var self = this // <-- variable, which is "closed over"
this.value = 1; // self === this
this.print = function() {
console.log(self.value); // <-- self "names" previous this object
};
return this;
})();
1ちょっと嘘です。Function.callおよびFunction.apply関数を使用すると、コンテキストを指定でき、上記のように明示的な「自己閉鎖」の必要性をなくすthisなど、「コンテキスト バインディング」関数で使用できます。Function.bind