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的呢?简单地说,按如下步骤:
- 计算表达式A,得到一个引用refA;
- 计算表达式B,得到一个值valueB;
- 将valueB赋给refA指向的名称绑定;
- 返回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]
网友评论