今天看到一段面试代码,有点小问题,请给我一个详细的解答可以吗?

var a = { n : 1 };
    var b = a;
    a.x = a = { n : 2 };
    console.log( a.x );  // undefined
    console.log( b.x );  // Object { n = 2 }
    

我的想法是这样的:

var a = {
    n : 1,
    x : a = { 
        n : 2       
    }
}

不知道我的想法有没有错误的地方,如有,希望能帮我指出,可以帮我解释下吗?谢谢!

阅读 3.8k
10 个回答

不懂,等答案了。这东西没事研究行,千万别这么写,否则你老板准开了你!!

在浏览器上试一下

a
Object {n: 2}
b
Object {n: 1, x: Object}
    n: 1
    x: Object
        n: 2
        __proto__: Object
    __proto__: Object

f12 在控制台执行一下就粗来了
clipboard.png

var b=a,这句表明b和a指向同一个引用地址,a.x={n:2},表明在这个地址上加上一个属性,因为b也指向这个地址,所以b的值也相应改变。后面a={n:2}重新给a指向一个新的地址

指针和赋值的区别

新手上路,请多包涵

首先程序先预解释 声明了一个变量 var a var b
然后执行程序
第一步 a = { n : 1 } //给 a 赋值了一个地址1111 这个地址1111指向一个堆内存 { n:1}
第二步 b = a;// 是把 地址1111 这个地址赋值给了 b 既a,b指向了同一个地址1111
第三步有一个连等 可以拆分为
a.x = { n : 2 };// a.x 是给地址1111的对象添加了一个属性x:{n:2} ;

a = { n : 2 }; // 这步是把a指向的地址变为2222 了  也就是{n:2}  

console.log( a.x ); // 此时的a = { n:2 } 所以为undefined
console.log(b.x); //此时的b= { n : 1,x : a = { n : 2 }} x指向一个对象 所以为Object {n:2}

推荐问题
宣传栏