Несмотря на годы разработки, для многих разработчиков ключевое слово this по сей день остается загадкой.

Согласно терминологии таких языков, как Java, PHP или других, this - это экземпляр текущего объекта в методе класса. this нельзя использовать вне метода; и такой простой подход не создает путаницы.

В JavaScript ситуация иная: this - это контекст вызова функции. Существует 4 типа вызова функций:

  • вызов функции: alert('Привет, Мир!')
  • вызов метода: console.log('Привет, Мир!')
  • вызов конструктора: new RegExp('\\d')
  • непрямой вызов: alert.call(undefined, 'Привет, Мир!')

Каждый тип вызова по-своему определяет контекст, поэтому поведение this отличается от ожидаемого разработчиком.

Более того, строгий режим 'use strict' также влияет на контекст выполнения.

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

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

Перед тем как читать дальше, ознакомимся с парой терминов:

  • Вызов функции - это выполнение кода, составляющего тело функции, т.е. простыми словами - сама функция. Например, parseInt('15') - это вызов функции parseInt.
  • Контекст вызова - это значение this в теле функции.
  • Область видимости функции - это набор переменных и функций, доступных в теле функции.