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

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 }
}

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

这问题已经有人问过了,还有详细说明
https://segmentfault.com/q/10…

分析的文章在这里从一个简单例子来理解js引用类型指针的工作方式

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

在浏览器上试一下

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

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

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.logb.x; //此时的b= { n : 1,x : a = { n : 2 }} x指向一个对象 所以为Object {n:2}

这是我的理解:https://segmentfault.com/a/11…

发表评论

电子邮件地址不会被公开。 必填项已用*标注