一个面试题

<code>
var a = {
n:1
}
var b = a;
a.x = a = {
n:2
}
console.log(a.x)
console.log(b.x)
</code>
连等赋值为A=B=C;从右往左,所以是C=B,B=A;
所以这段代码应该是这样执行的:全局执行上下文创建后,创建变量对象时,创建一个变量a 它的值为一个引用地址的指针,指向n:1
然后创建一个变量b,它的值为变量a的引用地址指针,此时,a和b是完全一样的
然后执行下面的代码,按照早先的思路,连等赋值应该是从右往左执行的,应该是n:2这个值赋给a,然后a赋值给a.x,所以a.x应该为n;2,b.x应该为undefined;实际是错的。
先创建一个新的引用地址 n:2
.运算符是优先于=运算符的,所以先声明一个a的属性x,为undefined,此时a是指向b的,所以b现在也拥有一个x属性为undefied,然后将a变量的引用地址指针改变为n:2,因为a的变量引用地址指针变成了n:2,新的引用地址当中没有x这个属性,所以x为undefined.
然后a.x现在指向的是旧的引用地址,也就是b的引用地址中的x,然后将b.x赋值为n:2。所以最后,a.x应该为undefined,b.x为n:2

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,002评论 0 7
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,027评论 0 12
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,753评论 0 4
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,203评论 30 471
  • 在修身方面,最近精进很多,究其原因,我找到了一个精神榜样,在一个所有人会质疑一切,所有人也会相信一切的时代,我们可...
    我与乞力马扎罗阅读 3,569评论 0 2