Я нашел эту проблему в коллекции вопросов интервью GitHub:
var foo = {n: 1}; var bar = foo; foo.x = foo = {n: 2};
Вопрос: какое значение имеет foo.x?
Ответ - undefined
.
Я провел некоторое исследование, и я понимаю, что эта проблема (поправьте меня, если я ошибаюсь):
var foo = {n: 1};
объявляет объектfoo
со свойствомn
, равным 1.var bar = foo;
объявляет объектbar
, который ссылается на тот же объект, что иfoo
.foo.x = foo = {n: 2};
, который, я считаю, равенfoo.x = (foo = {n: 2});
- И тогда я получил
foo.x
равныйundefined
. Однако значениемbar.x
является объект{n:2}
.
Если bar
и foo
ссылаются на один и тот же объект, почему bar.x
получил значение, а foo.x
- undefined
? Что на самом деле происходит в foo.x = foo = {n: 2};
?