GoodPirojok, потому что у любой функции объявленной через function будет свой контекст.
Можете сделать ее без своего контекста, тогда она будет брать контекст от функции name. Например так
function name() {
let go = ()=>{
console.log(this.name, this.age, this.city);
}
go();
}
let user = {
name : 'Boris',
age : 23,
city : "LA"
}
name.call(user);
Роман, у стрелочных функций нет своего контекста в отличии от обычных функций, но из-за чего(как в данном примере) он появляется и берется от name?
т.е. по какой логике стрелочные функции получают этот контекст, если его быть не должно?
GoodPirojok, стрелочные функции ссылаются на контекст родительской области видимости. Если же родительская область видимости не имеет своего контекста, то он ссылается на ещё более вышестоящую область и т.д.
В первом ( где стоит обычная ф-ция ) this ссылается не на body, а на объект события, которое стоит при клике на body. Во втором стрелочная, ссылается на родительский объект по отношению к событию на body ( если у него есть свой контекст ). В данном случае родительский об-т по отношению к событию на body - глобальный об-т window.
Если у родительского об-та нет своего контекста, он будет ссылаться на родительский по отношению к нему, пока не упрётся в об-т имеющий свой контекст или в глобальный об-т window
почему обычная функция в функции возвращает window, если я указал контекст?
и из-за чего в этом случае стрелочная по умолчанию вызывается в контексте главной функции?
например, если я вызову через addEventListener, то стрелочная функция мне вернет window в отличии от классической функции.