Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: pass by reference, pass by value, mutable, immutable, object mutation

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

Вопрос проверяет понимание передачи по ссылке и по значению в JavaScript, а также мутабельность объектов и массивов.

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

В JavaScript объекты и массивы передаются по ссылке, поэтому изменения внутри функции влияют на оригинал. Примитивы передаются по значению, и их изменение не затрагивает внешнюю переменную. Чтобы избежать мутаций, можно создавать копии с помощью spread-оператора или Object.assign.

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

Передача по ссылке и по значению

В JavaScript примитивные типы (числа, строки, булевы значения) передаются по значению. Это значит, что при передаче в функцию создается копия значения, и изменения внутри функции не влияют на оригинальную переменную. Объекты и массивы, напротив, передаются по ссылке — функция получает ссылку на тот же объект в памяти, поэтому мутации внутри функции изменяют оригинал.

Пример с объектом

function updateUser(user) {
  user.name = 'Alice';
}
const person = { name: 'Bob' };
updateUser(person);
console.log(person.name); // 'Alice'

В этом примере объект person изменяется внутри функции, так как передается ссылка на него.

Пример с массивом

function addItem(arr) {
  arr.push(4);
}
const numbers = [1, 2, 3];
addItem(numbers);
console.log(numbers); // [1, 2, 3, 4]

Массив numbers также мутируется.

Как избежать мутаций

Чтобы не изменять оригинал, можно создать копию внутри функции. Для объектов используйте spread-оператор или Object.assign, для массивов — slice() или spread:

function safeUpdateUser(user) {
  return { ...user, name: 'Alice' };
}
const person = { name: 'Bob' };
const updated = safeUpdateUser(person);
console.log(person.name); // 'Bob'
console.log(updated.name); // 'Alice'

Такой подход называется иммутабельностью и часто применяется в React и Redux для предсказуемости состояния.

Вывод

Понимание передачи по ссылке важно для избежания неожиданных побочных эффектов. Используйте иммутабельные методы при работе с состоянием в приложениях, особенно в функциональных компонентах и управлении состоянием.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#pass by reference

#pass by value

#mutable

#immutable

#object mutation

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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