4
はのは例を見てみましょう:このコードブロックはどのようにJavaScriptで動作しますか?
最初:
var user = {
firstName: "John",
sayHi: function() {
alert(this.firstName);
}
};
setTimeout(function() {
user.sayHi(); // John
}, 1000);
秒:
var user = {
firstName: "John",
sayHi: function() {
alert(this.firstName);
}
};
setTimeout(user.sayHi, 1000);// undefined
なぜ第二の例では未定義?そしてそれはどのように機能しますか?
ありがとう、しかし私は匿名関数であなたの例をどのように動作させるのか分かりませんか?どのようにコンテキストを保存するのですか? –
@JimButton無名関数ではクロージャになります。私はオブジェクトユーザーを意味します。しかし、最初のケースでは、内部的にsetTimeoutは渡された関数参照を 'reference.call(scope)'のように呼び出します。ここでscopeはオーバーライドされなかった場合はウィンドウになります。したがってthis.firstNameはwindow.firstNameに似ています。 –
ご協力いただきありがとうございます! –