Оператор with из JavaScript о котором вы не слышали

В JavaScript есть синтаксис, о существовании которого многие разработчики даже не знают. Один из таких примеров это оператор with.

const user = { name: 'John', age: 25, };

with (user) { console.log(name); console.log(age); }

Давайте разберёмся, что делает with.

Он добавляет объект в scope chain. То есть внутри блока JavaScript сначала пытается найти переменную в объекте, переданном в with, и только потом идёт выше по областям видимости.

Звучит удобно. Но проблема в том, что код становится менее предсказуемым.

const name = 'global';

const user = { name: 'local', };

with (user) { console.log(name); }

Какой name выведется? Пишите в коментарии

Еще один интересный момент: в strict mode оператор использовать нельзя

Ну и небольшой вывод: можно сказать, что сегодня with почти не используется, но он остаётся интересным артефактом старого JS и отличным напоминанием о том, почему предсказуемость языка важнее магического синтаксиса.

Оператор with из JavaScript о котором вы не слышали | Сетка — социальная сеть от hh.ru