Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: pass by reference, object mutation, reference type, side effects

Что происходит при изменении свойств объекта внутри функции?

Вопрос проверяет понимание передачи объектов по ссылке в JavaScript и мутации данных.

Короткий ответ

Объекты в 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

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#pass by reference

#object mutation

#reference type

#side effects

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию