@AlexNew22

Почему у стрелочной функции из объекта контекст виндоу?

На сколько я понял, контекст стрелочной функции тот, где она была создана
В классе у нее контекст сам класс, хоть вызываем в контексте элемента
А вот почему в объекте у нее контекст виндоу, ведь мы же создали ее в объекте
Как лучше понять контекст стрелочной функции?
https://codepen.io/user2022nn/pen/mdpQqav?editors=1111
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
На learn.javascript, например, неплохо написали:
Стрелка => ничего не привязывает. У функции просто нет this.
При получении значения this – оно, как обычная переменная, берётся из внешнего лексического окружения.


В вашем примере с литералом объекта можно добавить для понимания:
const obj = {
  w() {
    console.log('w', this);
  },
  x: function () {
    console.log('x', this);
  },
  y: this,
  z: () => {
    console.log('z', this);
  },
};

obj.w(); // obj
obj.x(); // obj
console.log('y', obj.y); // Window
obj.z(); // Window


Запись литерала объекта не создаёт свой контекст: на момент записи this тот же, что и снаружи:
const a = this; // Window
const obj = {
  b: this, // тоже Window 
}

a === obj.b // true
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы