Что выведет код JS ?
https://t.me/javascriptv
Ответ:
"Marko Polo" [object Window]
Объяснение:
Стрелочные функции не создают собственный контекст для this, а используют значение this окружающего контекста. В нашем случае this в функции getName ссылается на контекст выполнения метода guessThis, то есть на сам объект, и мы легко обращаемся к его свойству name.
Во втором случае при передаче колбэка в метод, контекст выполнения теряется, поэтому this ссылается на глобальный объект. Также если бы был включен строгий режим то this в данном случае был бы равен undefined. Чтобы избежать потерю контекста можно использовать методы call, bind, или apply.
Код:
const myFavoriteObj = {
guessThis() {
const getName = () => {
console.log(this.name);
};
getName();
},
name: "Marko Polo",
thisIsAnnoying(callback) {
callback();
},
};
myFavoriteObj.guessThis();
myFavoriteObj.thisIsAnnoying(function() {
console.log(this);
});