Есть такой код:
let user = {
firstName: "Вася",
sayHi() {
alert(`Привет, ${this.firstName}!`);
}
};
setTimeout(user.sayHi, 1000); // Привет, undefined!
и такой:
let user = {
firstName: "Вася",
sayHi() {
alert(`Привет, ${this.firstName}!`);
}
};
setTimeout(function() {
user.sayHi(); // Привет, Вася!
}, 1000);
В первом примере я понимаю, что мы передаем в функцию setTimeout только функцию user.sayHi. И во время выполнения setTimeout имеет ссылку на this отличную от ранее созданного объекта.
А почему это работает во втором случае? Ведь мы вызываем анонимную функцию, как она сохраняет ссылку на this объекта user? Почему в этом случае происходит не как в первом случае?