Проверяет понимание иммутабельности в JavaScript и разницы между переприсваиванием переменной и изменением содержимого объекта.
Иммутабельность означает, что после создания значение нельзя изменить. В JavaScript примитивы (числа, строки, булевы значения) иммутабельны по своей природе, а объекты и массивы — нет. Переменная, объявленная через const, лишь запрещает переприсваивание ссылки, но сам объект по этой ссылке остаётся изменяемым.
Когда вы пишете const arr = [1, 2, 3], движок фиксирует привязку имени arr к массиву. Но содержимое массива — это отдельная сущность, и её можно менять:
const arr = [1, 2, 3];
arr.push(4); // [1, 2, 3, 4]
arr[0] = 99; // [99, 2, 3, 4]
arr.length = 0; // []
// arr = []; // TypeError: Assignment to constant variableОшибка возникает только при попытке присвоить переменной новое значение. Мутации содержимого проходят без предупреждений.
map, filter, concat.const arr = Object.freeze([1, 2, 3]);
arr.push(4); // TypeError в strict mode, молча игнорируется в sloppy
arr[0] = 99; // не изменится
// Иммутабельное обновление через копию
const next = [...arr, 4]; // [1, 2, 3, 4]Важно: Object.freeze работает поверхностно. Вложенные объекты остаются изменяемыми, для глубокой заморозки нужна рекурсивная функция или structuredClone с последующим freeze.
Иммутабельность критична в React и Redux: изменение состояния через мутацию ломает сравнение ссылок и мешает перерисовке. В функциональном программировании неизменяемые данные упрощают рассуждения о коде и безопасны в многопоточных сценариях.
Итог: используйте const для защиты от переприсваивания, а для настоящей иммутабельности — Object.freeze или создание новых копий при каждом изменении.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию