> В чем отличие передачи параметров по значению и по ссылке в JavaScript? (JavaScript)

Уровень: middle · Роль: frontend · Категория: Технические вопросы

Компании: JSA GROUP

Стек: JavaScript

> Пример ответа

В JavaScript передача параметров всегда происходит по значению, но это значение может быть ссылкой на объект. Ключевое отличие:

  • Примитивы (числа, строки, булевы значения, null, undefined, symbol, bigint) копируются полностью. Изменение параметра внутри функции не влияет на исходную переменную.
  • Объекты (включая массивы, функции, объекты) передаются по значению, но этим значением является ссылка на объект в памяти. Поэтому внутри функции можно изменить свойства объекта, и эти изменения будут видны снаружи. Однако присвоение нового значения параметру (например, obj = {}) не повлияет на внешнюю переменную.

Пример:

JAVASCRIPT
function changePrimitive(x) {
x = 10; // не влияет на внешнюю переменную
}
let a = 5;
changePrimitive(a);
console.log(a); // 5
function changeObject(obj) {
obj.name = 'new'; // изменяет свойство исходного объекта
}
let myObj = { name: 'old' };
changeObject(myObj);
console.log(myObj.name); // 'new'
function reassignObject(obj) {
obj = { name: 'other' }; // не влияет на внешнюю ссылку
}
reassignObject(myObj);
console.log(myObj.name); // 'new' (осталось прежним)

Таким образом, в JavaScript нет передачи по ссылке в классическом смысле (как в C++), а есть передача значения-ссылки для объектов.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью