Читая о ключевом слове this и стрелочной функции, я прочитал: эти стрелочные функции привязываются к любому контексту выполнения, который имеет окружающая область. Ниже я прикрепил простой пример кода. Когда я попробовал:
const user = {
firstName: "John",
sayHi() {
console.info("this in normal function", this);
console.info(`Hello, ${this.firstName}!`);
},
sayHiWithArrow: () => {
console.info("This in arrow function", this);
console.info(`Hello, ${this.firstName} with Arrow!`);
},
};
user.sayHi();
user.sayHiWithArrow();
в консоли для функции стрелки в среде nodejs:
"This in arrow function {}"
Hello, undefined with Arrow!
Мой вопрос: не является ли область действия чем-либо, что находится в блоках {}, что в данном случае является пользовательским объектом? Я хотел бы знать, что образует область видимости в JavaScript. Почему {} объекта здесь не считается областью действия?
Примечание: при преобразовании вашего примера для использования scope не имеет значения, была ли функция стрелкой или обычной функцией.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Почему {} объекта здесь не считается областью действия?
{} имеет несколько несвязанных значений в JavaScript:
Ваш пример является литералом объекта. Вот почему он не ведет себя как блок.
«Мой вопрос заключается в том, не является ли область действия чем-либо, что находится в {} блоках» да, блоки. Литерал объекта не является блоком. Сравните это с
if (true) {}— можете ли вы иметь одинаковые конструкции внутри{}дляifи{}, которые являются объектными литералами? Ответ «нет», например, вы не можете иметь еще одинif. Литералы объектов не являются блоками. Актуально: Ссылки на себя в литералах/инициализаторах объектов | Методы в объектах ES6: использование стрелочных функций Что означает «this» в стрелочных функциях в ES6?