Поскольку мы говорим о среде выполнения JavaScript, this представляет объект window в браузере и объект global в NodeJS.

Теперь мы увидим контекст this в нескольких сценариях внутри функций.

Описание функций

когда оператор функции вызывается из глобальной области видимости, this указывает на глобальную, потому что вызывающий объект является глобальным, но невидимым.

1. «это» в операторах функций литерала объекта

этоуказывает на вызывающий объект

В приведенном ниже коде показано, что внутри оператора функции this всегда указывает на вызывающий объект. Здесь вызывающим объектом является myObject в строке 7, this указывает на myObject внутри литерала объекта. Поведение this можно увидеть в строке 3.

2. это в функции псевдонимов

это указывает на глобальный или оконный объект

Код ниже показывает, что myFunction была назначена другой функции (псевдоним). Поскольку вызывающая функция не указывает ни на какой объект, контекст this изменяется, и он представляет объект window/global вместо myObject.

Мантра, которую нужно помнить для этого в операторах функций

Если функция вызывается в форме obj.func(),

«это» равно «объект»

еще

«это» равно «глобально/окну»

3. это во вложенной функции

Допустим, у нас есть функция внутри функции в объектном литерале. Тогда this вложенной функции будет указывать на объект global вместо myObject. Прикрепил код для лучшего понимания, в случае если вложенная функция не вызывается никаким объектом и this автоматически указывает на глобальный объект.

Строки 5 и 6 показывают, что это указывает на глобальный объект вместо myObject.

Стрелочные функции

Стрелочные функции — это новые дополнения из функций ES6, стрелочные функции эквивалентны функциональным выражениям. Здесь this представляет глобальный/оконный объект, аналогичный операторам функций.

1. "this" в стрелочных функциях литерала объекта

этоуказывает на окно или глобальный объект

Код ниже показывает, что this указывает на объект окна, хотя вызывающий объект указывает на myObj. Причина в том, что this стрелочной функции ссылается на свою лексическую область видимости, а не на вызов объекта. В строке 3 лексическая область видимости myObj — это объект окна, а this указывает на объект окна.

2. это во вложенной стрелочной функции

это ведет себя в обратном порядке от обычного оператора функции

Код ниже показывает, что this указывает на myObject внутри вложенной функции, а не на объект окна. Концепция здесь заключается в том, что this относится к своей лексической области видимости, т. е. myObject.

Различие этого в функциях со стрелками и операторах функций