#javascript #closures
#javascript #замыкания
Вопрос:
var foo = {'bar': 1};
function overwriteFoo(obj) {
obj = foo;
obj = {'bar': 2};
}
overwriteFoo(foo)
console.log(foo)
Я думал, что присвоение foo объекту obj заставит это работать так, как я хотел. Я думал, что объекты в javascript были отправлены по ссылке, так почему я не могу переназначить foo?
Ответ №1:
Как говорят некоторые люди, все передается по значению, а значения объектов являются их ссылками. Когда вы это делаете obj = {'bar': 2}
, вы переназначаете obj
, чтобы указывать на {'bar': 2}
, а не указывать на foo
. На самом деле, нет способа просто поменять весь объект таким образом. Однако вы можете изменять свойства, поскольку они по существу «разыменовывают» значение:
function overwriteFoo(obj) {
obj.bar = 2;
}
overwriteFoo(foo);
console.log(foo); // will now be {bar: 2}
Ответ №2:
Привязка переменной к другой переменной просто возвращает содержимое присвоенной переменной.
Пример:
var obj1 = {hello: 'hello'};
var obj2 = obj1;
alert(obj2);// will return hello: 'hello'
// BUt if you try to change obj2 to an object then obj1 will be just unassigned from obj2 but is not changed.