Ответ
В 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 - исходный объект НЕ изменился