Вопрос проверяет понимание передачи объектов по ссылке в JavaScript и мутации данных.
В JavaScript примитивные типы (числа, строки, булевы значения) передаются по значению, а объекты (включая массивы и функции) — по ссылке. Это означает, что когда вы передаете объект в функцию, вы передаете не копию объекта, а ссылку на ту же область памяти. Любое изменение свойств этого объекта внутри функции напрямую изменяет исходный объект.
function updateName(user) {
user.name = 'Alice';
}
const person = { name: 'Bob' };
updateName(person);
console.log(person.name); // 'Alice'В примере функция updateName изменяет свойство name переданного объекта. После вызова функции исходный объект person также изменился, так как внутри функции использовалась та же ссылка.
Чтобы не изменять исходный объект, можно создать его копию внутри функции. Для поверхностного копирования используется Object.assign() или спред-оператор:
function updateNameSafe(user) {
return { ...user, name: 'Alice' };
}
const person = { name: 'Bob' };
const updatedPerson = updateNameSafe(person);
console.log(person.name); // 'Bob'
console.log(updatedPerson.name); // 'Alice'Для глубокого копирования (вложенные объекты) можно использовать structuredClone() или библиотеки вроде Lodash.
Понимание передачи объектов по ссылке важно для предотвращения нежелательных побочных эффектов в коде. Если функция должна изменять данные, лучше возвращать новый объект, а не мутировать переданный. Это делает код более предсказуемым и упрощает отладку.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию