Как передаются параметры функций в JavaScript?

«Как передаются параметры функций в JavaScript?» — вопрос из категории JavaScript, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В JavaScript используется передача по значению (pass-by-value), но важно понимать, что это значит для разных типов данных:

  • Для примитивных типов (Number, String, Boolean, null, undefined, Symbol, BigInt) передается копия значения. Изменение параметра внутри функции не влияет на внешнюю переменную.
  • Для объектов (включая Array, Function, Date) передается копия ссылки на объект в памяти. Сама ссылка передается по значению, но через нее можно мутировать исходный объект. Присвоение параметру нового объекта разрывает эту связь.

Примеры:

// Примитив: передача копии значения
function changePrimitive(val) {
  val = 10; // Меняется локальная копия
}
let a = 5;
changePrimitive(a);
console.log(a); // 5 - исходное значение не изменилось

// Объект: передача копии ссылки
function mutateObject(obj) {
  obj.value = 100; // Мутация исходного объекта через ссылку
}
function reassignObject(obj) {
  obj = { value: 200 }; // Присваивание новой ссылки локальному параметру
}
let myObj = { value: 5 };
mutateObject(myObj);
console.log(myObj.value); // 100 - объект изменен
reassignObject(myObj);
console.log(myObj.value); // 100 - исходный объект НЕ изменился