Answer
t.me/js_testОтвет:
3 1
Объяснение:
Значение ключевого слова this зависит от того, где оно используется. В методе, как и в методе getFoo, ключевое слово this ссылается на объект, которому принадлежит метод. Метод принадлежит объекту bar, поэтому this относится к нему. Когда мы регистрируем this.foo, регистрируется свойство foo объекта bar которое является 3.
С помощью метода call мы можем изменить объект, на который ссылается this. В функциях ключевое слово this относится к объекту, которому принадлежит функция. Мы объявили функцию setTimeout для объекта window, поэтому в функции setTimeout this ссылается на глобальный объект. В глобальном объекте есть переменная с именем foo со значением 1. При регистрации this.foo выводится 1.
Код:
var foo = 1;
setTimeout(() => {
let foo = 2;
const bar = {
foo: 3,
getFoo(){
return this.foo;
}
}
console.log(bar.getFoo());
console.log(bar.getFoo.call(this));
}, 0);