有人可以解释以下涉及Javascript对象的双重赋值

时间:2018-02-25 18:55:39

标签: javascript

var foo = {n: 1}
var bar = foo
foo.x = foo = {n: 2}

console.log(foo) // {n: 2}
console.log(bar) // ​​​{n: 1, x: {n: 2 }}​​​​​

有人可以解释第三行发生的事情吗?

1 个答案:

答案 0 :(得分:1)

foo.x = foo = {n: 2}行执行此操作:

  1. 获取对象foo正在引用
  2. {n: 2}分配给foo
  3. foo现在引用的对象分配给步骤x中确定的对象的属性1.
  4. 这基本上与函数调用的代码相同,其中foo被覆盖在函数内部:

    
    
    var foo = {n: 1}
    var bar = foo
    foo.x = test();
    
    console.dir(bar);
    
    function test() {
       foo = 2;
       return 3;
    }
    
    
    

    foo函数内部更改了

    test,但在此之前确定了对象foo