this
常に1は、関数オブジェクトが呼び出されたオブジェクトに評価されます。window
それが「何も呼び出されなかった」(または のプロパティである) 場合は に評価されwindow
ます。
(は変数でthis
はないため、クロージャで閉じられていないことに注意してください!これが、変数orthis
によってしばしば知られる「正しい」値を取得するためにクロージャが必要になる場合がある理由です。)self
that
_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