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 для привязок на итерацию.