Это не имеет никакого отношения к передаче переменной по ссылке или нет.
На самом деле проблема в том, что вы поместили другой объект внутрь ref
, который не указывает на тот же объект хранится в переменной user
.
function update(ref) {
//In this line we are reinitializing the value of ref with another object
ref = {
dep: "yyy"
};
ref.name = 'modified';
}
Демонстрация:
Давайте посмотрим на разницу в этом фрагменте:
var user = {
name: "xxx"
}
function update(ref) {
//Here we are updating ref/user
ref.before = "a value";
//And in this line we are reinitializing the value of ref with another object
ref = {
dep: "yyy"
};
ref.name = 'modified';
console.log('This is ref value: ');
console.log(ref);
}
update(user);
console.log('This is user value: ');
console.log(user);
Аргументы в JS функциях:
А что касается того, как аргументы передаются в функции (по ссылке или по значение) есть разница между примитивами и объектами, вы можете прочитать документы MDN Функции , где написано:
Параметры примитива (например, число) передаются в функции по значению ; значение передается функции, но если функция изменяет значение параметра, это изменение не отражается глобально или в вызывающей функции.
Если вы передаете объект (т.е. непримитивное значение, такое как Array или определенный пользователем объект) в качестве параметра , и функция изменяет свойства объекта, это изменение видно вне функции .