Эти два простых примера были даны мне для объяснения объектов в javascript. Я понимаю первый пример, но то, что ускользает от меня, - это то, почему во втором (очень похожее) примере o
не перезаписывается пустым объектом?Почему этот объект не перезаписывается?
function foo(obj) {
obj.x = 7;
}
var o = {x: 5};
foo(o);
console.log(o.x); // 7
Мне кажется, что в следующем примере, неопределенная должен быть зарегистрирован:
function foo(obj){
obj = {};
}
var o = {x: 5};
foo(o);
console.log(o.x); // 5
Но это не так, как же? В чем разница между этими двумя примерами, которая заставляет o
не перезаписываться во втором примере?
Но от того, что я понимаю, JavaScript присваивает объекты переменных по ссылке (или, более конкретно, значение, которое является ссылкой на o ▪ Таблица). Вот почему работает первый пример. Но разве это не означает, что во втором примере объект будет перезаписан? – vkjb38sjhbv98h4jgvx98hah3fef
@DrMister no. * Значение * 'o' действительно является * ссылкой * на объект. Когда функция вызывается, * копия * этой ссылки производится и передается функции. Изменение «obj» изменяет эту переменную и не влияет на значение 'o'. – Pointy