Привет! На этой неделе я расскажу вам о том, как использовать this на языке JavaScript. Возможно, вы уже сталкивались ранее с этим ключевым словом в различных языках программирования. Например, в языке C# мы можем его использовать следующим образом: объявим класс пользователя User, который состоит из поля age, приватного поля, и публичного метода ShowAge. Метод ShowAge выводит на консоль значение поля age, а для этого он обращается к нему через ключевое слово this. Создавая instance класса пользователя и вызывая метод ShowAge, мы увидим на консоли значение поля age, в нашем случае это 24. Аналогичный пример мы можем переписать на языке Java. Объявляем класс User, приватный метод age и публичный метод showAge. Так же, как и в C#, мы обращаемся к полю age через ключевое слово this. Создавая instance класса пользователя и вызывая showAge, мы также увидим на консоли 24. Во всех этих примерах this обладает следующими свойствами: во-первых, это ключевое слово языка, а значит, его нельзя перезаписать, то есть в него нельзя положить другое значение никаким способом. Наконец, this всегда ссылается на текущий объект, а значит, использовать this за пределами объекта недопустимо. Аналогичный пример на JavaScript можно переписать следующим образом: объявим функцию User, которая возвращает объект. Этот объект состоит из двух полей: поле age — аналог свойства, и поле showAge — это аналог метода. При этом в методе showAge мы обращаемся к свойству age, используя ключевое слово this. Создавая instance нашего класса пользователя и вызывая у него метод showAge, мы увидим на консоли 24. Таким образом, мы получили поведение, аналогичное другим языкам программирования. Однако в отличие от них, в JavaScript у ключевого слова this есть уникальное свойство — мы можем использовать его за пределами объекта. Давайте рассмотрим это подробней. Если мы, находясь в консоли браузера, позовем свойство innerWidth у ключевого слова this, находясь в глобальной области видимости, то мы получим ширину текущего окна. Если мы позовем свойство process и вызовем у него свойство version, если мы находимся в интерпретаторе Node.js, то мы получим текущую версию Node.js. Таким образом мы используем ключевое слово this в глобальной области видимости, за пределом какого-либо объекта, и это работает корректно. На прошлой неделе мы познакомились с вами с такой темой, как лексическая область видимости. Сегодня, для того чтобы понимать, как работает ключевое слово this, мы углубим эти знания и поговорим о такой теме, как контекст исполнения. Давайте коротко напомним про область видимости. Любая функция или переменная, которые описаны не в рамках другой функции, попадают в глобальную область видимости. А переменные и функции, которые описаны в рамках другой функции, попадают в область видимости этой функции. Контекст исполнения содержит область видимости. На этом слайде я обозначил область видимости аббревиатурой LE — lexical environment. Помимо области видимости, контекст исполнения содержит ключевое слово this, которое определяется в момент интерпретации участка кода. И зависит this от следующих факторов: от типа участка кода, от того, как мы попали на этот участок кода, и от режима работы интерпретатора. Чему конкретно равен this, мы рассмотрим с вами на примерах в следующих видео.