Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: object, reference

Как изменить данные через функцию, используя объект?

Вопрос проверяет понимание того, что объект в JS передаётся как значение-ссылка, поэтому изменение его свойств внутри функции отражается снаружи.

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

Если передать в функцию объект, можно изменить его свойства внутри функции, и эти изменения будут видны снаружи. Это происходит потому, что параметр получает копию ссылки на один и тот же объект. Пока ты меняешь свойства (например, obj.count++), ты работаешь с тем же объектом. Но если ты переприсвоишь сам параметр (например, obj = {}), внешний объект не изменится.

Длинный ответ

Этот вопрос помогает понять важную модель: функция получает копию ссылки на объект, поэтому обе стороны “смотрят” на один и тот же объект в памяти.

Определение

Определение: Изменение объекта (mutation) — это изменение его внутреннего состояния (например, свойств), без создания нового объекта.

Пример: изменение свойства внутри функции

function incrementCounter(state) {
  state.count += 1;
}

const state = { count: 0 };
incrementCounter(state);

console.log(state.count); // 1

Почему это работает:

  1. state хранит ссылку на объект { count: 0 }.

  2. В функцию передаётся значение этой ссылки (копия ссылки).

  3. Параметр функции указывает на тот же объект.

  4. state.count += 1 меняет объект, поэтому результат виден снаружи.

Важное отличие: изменение свойства vs переприсваивание параметра

Изменение свойства меняет тот же объект:

function setName(user) {
  user.name = 'Ann';
}

const u = { name: 'Bob' };
setName(u);

console.log(u.name); // 'Ann'

Переприсваивание параметра не меняет внешний объект:

function replaceUser(user) {
  user = { name: 'Ann' }; // новый объект, но ссылка только в локальном параметре
}

const u = { name: 'Bob' };
replaceUser(u);

console.log(u.name); // 'Bob'

Как это использовать “правильно”

Тут есть два распространённых подхода — выбор зависит от стиля кода и требований.

  1. Императивно (мутировать объект)

    • удобно в простом коде

    • быстро и без лишних аллокаций

    • но есть риск неожиданных побочных эффектов

  2. Функционально (возвращать новый объект)

    • предсказуемее, особенно в UI

    • проще отслеживать изменения и делать сравнения

    • часто используется в React/Redux-подходах

Пример без мутаций:

function incrementCounter(state) {
  return { ...state, count: state.count + 1 };
}

let state = { count: 0 };
state = incrementCounter(state);

Практическое замечание для React

  • В React состояние обычно обновляют без мутаций, чтобы сравнение ссылок помогало понять, что данные изменились.

  • Но локальные объекты (не state) можно мутировать, если это не влияет на рендер-логику.

Вывод: чтобы “изменить данные через функцию”, передавай объект и меняй его свойства — изменения будут видны снаружи, потому что функция получает копию ссылки на один и тот же объект. Если важна предсказуемость (например, в React), чаще возвращают новый объект вместо мутаций.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

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

#object

#reference

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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