Я читал много статей про стрелочные функции в JavaScript, но все еще путаюсь с тем как работает контекст.
Что я понимаю:
- В обычных функциях
this
зависит от того, кто вызывает функцию. - В стрелочных функциях
this
берется из окружающего контекста.
Мои вопросы:
-
Что точно означает “окружающий контекст”? Достаточно ли фигурных скобок
{}
чтобы создать такой контекст? -
Пример с EventEmitter:
const { EventEmitter } = require('events');
class User extends EventEmitter {
constructor(username) {
super();
this.username = username;
}
}
let john = new User('john');
john.on('message', (text) => {
console.log(`${this.username}: ${text}`);
});
john.emit('message', 'привет всем');
Почему стрелочная функция тут не работает? Объект john
вызывает метод on
, так почему стрелочная функция не может получить this
из контекста метода on
?
- С обычной функцией все работает:
john.on('message', function(text) {
console.log(this.username); // работает
});
Но почему? Ведь john
вызывает on
, а не саму анонимную функцию внутри.
- Если стрелочная функция передается как параметр
someFunc(() => {})
, что считается ее окружающим контекстом?
Заранее спасибо за помощь!