April 10th, 2021

Учебник по JavaScript: ч.1: привязка контекста, повтор стрелочных функций

Закончил читать шестой раздел («Продвинутая работа с функциями») первой части («Язык программирования JavaScript») учебника по JavaScript.

https://learn.javascript.ru

Часть 1. Язык программирования JavaScript (в т.ч. 93 подраздела)

Разделы:

6. Продвинутая работа с функциями (11 подразделов)

6.10 Привязка контекста к функции
6.11 Повторяем стрелочные функции

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

Эта проблема проистекает из того, что в языке JavaScript переменная this может менять свое значение в зависимости от окружения. Об этом уже ранее рассказывалось в подразделе 4.4 «Методы объекта, "this"» учебника. Но здесь это явление рассматривается подробнее.

Для решения проблемы потери контекста предлагается применять встроенный метод bind, который фиксирует значение this в указанное. После этого this метода остается фиксированным и изменить его нельзя.

Также с помощью встроенного метода bind можно уменьшать количество параметров функции. В википедии про это есть статья:

https://ru.wikipedia.org/wiki/Частичное_применение

В подразделе 6.11 более подробно разбираются свойства стрелочных функций. Ранее про стрелочные функции было рассказано в подразделе 2.17 «Функции-стрелки, основы» учебника, а также они активно применялись в задачах предыдущих подразделов.

Стрелочные функции не имеют собстенного контекста this и к их аргументам нельзя обратиться через внутренний псевдомассив arguments (про этот псевдомассив было рассказано в подразделе 6.2 «Остаточные параметры и оператор расширения» учебника). Также стрелочные функции не могут быть вызваны с new (не могут быть использованы как конструкторы объектов, подробнее об этом было в подразделе 4.5 «Конструкторы, создание объектов через "new"» учебника). Эти ограничения (хотя, можно считать их не ограничениями, а, наоборот, полезными свойствами, с какой стороны посмотреть) введены потому, что стрелочные функции предназначены для небольшого по объему кода, который не имеет своего контекста, выполняясь в текущем контексте (контексте своего «родителя»).