2015-04-13 3 views
2

Эти два простых примера были даны мне для объяснения объектов в 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 не перезаписываться во втором примере?

ответ

1

В обоих примерах, которые Вы передаете копию ссылки на объект, а не сам объект

В примере 1 изменить что-то в пределах объекта, мелкий В примере 2 в функции вы изменить саму ссылку, это теперь указывает на нечто иное, чем у исходного объекта, вне зависимости ссылка все тот же

Это передача по значению об проход по ссылке

1

Параметр obj - это отдельная переменная от o. Он получает копию значения p при вызове функции. Изменение значения obj не влияет на o.

JavaScript - это исключительно язык с перекрестными знаками. Невозможно создать псевдоним для переменной JavaScript, поэтому нет ничего, что вызываемая функция может изменить, чтобы изменить значение переменной в вызывающей среде.

+0

Но от того, что я понимаю, JavaScript присваивает объекты переменных по ссылке (или, более конкретно, значение, которое является ссылкой на o ▪ Таблица). Вот почему работает первый пример. Но разве это не означает, что во втором примере объект будет перезаписан? – vkjb38sjhbv98h4jgvx98hah3fef

+1

@DrMister no. * Значение * 'o' действительно является * ссылкой * на объект. Когда функция вызывается, * копия * этой ссылки производится и передается функции. Изменение «obj» изменяет эту переменную и не влияет на значение 'o'. – Pointy

0

В вашей функции foo, когда вы устанавливаете obj = {}, вы меняете ссылку, на которую ссылается obj. но вы не меняете то, что o ссылок.

Смежные вопросы