面试题总结

1. js连等复制运算
var a = {n: 1};
var b = a;
a.x = a = {n: 2};
alert(a.x); // --> undefined
alert(b.x); // --> {n: 2}


解析:参考 https://segmentfault.com/a/1190000004224719#articleHeader0

(1)理论
JS引擎是怎样计算一般的赋值表达式 A = B的呢?简单地说,按如下步骤:

  1. 计算表达式A,得到一个引用refA;
  2. 计算表达式B,得到一个值valueB;
  3. 将valueB赋给refA指向的名称绑定;
  4. 返回valueB。

(2)思路
设:[X]表:X的内存应用
[N1]=>[N:1]
[N2]=>[N:2]

a.x = a = {n: 2};
这里会被翻译成
[N1].x=(a=[N2]) (括号里面为右值运算 所以这里就是把a变量的内存地址改向[N2])
=>
[N1.]X=[N2]
a=[N2]
b=N1
=>
a=[N2]
a.x=[N2].x(然而N2不存在X值 所以指向undefined)
b.x=[N1].x=[N2]

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容