foundation

Лексическая область видимости и замыкания

Лексические окружения, захваченные переменные, состояние модулей, состояние в callback и удержание памяти.

Лексическая область видимости определяется местом написания кода, а не местом вызова функции. Замыкание сохраняет доступ к привязкам внешнего лексического окружения после возврата внешней функции.

Замыкания лежат в основе callbacks, состояния модулей, фабрик, React hooks и приватного состояния. Замыкание захватывает привязку (ячейку переменной), а не снимок значения на момент создания — если только вы не создаёте новую привязку на каждой итерации.

					for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 0); // 3, 3, 3
}
for (let j = 0; j < 3; j++) {
  setTimeout(() => console.log(j), 0); // 0, 1, 2
}
				

Следите за памятью: замыкания могут удерживать крупные объекты. В UI stale closures возникают, когда захваченные значения не обновляются.

На интервью объясняйте концепцию на конкретном примере и называйте поведение рантайма, которое проверяют.

Типовые ошибки: путать похожие API и забывать edge cases в live coding.

Компромисс часто между ясностью и производительностью или между безопасностью и удобством.

Чеклист:

  • Объясните лексическую и динамическую область видимости.
  • Захватывайте привязки, а не копии значений.
  • Используйте let для привязок на итерацию.