Javascript ouptut问题

Pri*_*wal 0 javascript output

我正在练习一些Javascript输出问题,并遇到了一个我无法理解输出的问题.这是代码:

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
Run Code Online (Sandbox Code Playgroud)

foo.x的价值是什么?

我认为它会给出{n:2,x:{n:2,x .....}}.但它的价值是不确定的.任何人都可以向我解释为什么它的价值即将到来

bmc*_*ney 5

foo 只是对象的引用.

该线foo.x = foo = {n: 2};从左到右依次发生.以下是按顺序执行的步骤:

  1. foo.x赋值为foo,它是一个n属性等于1 的对象的引用.

  2. foo然后被分配给一个新对象,{n: 2}.从foo现在开始引用一个没有x属性的新对象,然后foo.x是未定义的.

但因为bar是对原始foo对象的引用(在重新分配之前),所以原始对象仍然存在于内存中.这就是bar对象具有xn属性的原因.