js
let obj = {
num1: 117
}
let res = obj;
obj.child = obj = { num2: 935 };
var x = y = res.child.num2;
console.log(obj.child);
console.log(res.num1);
console.log(y);
解析:
-
let obj = { num1: 117 }
把
obj
放在栈里,把{ num1:117}
放在堆里,让obj
指向堆里的{ num1:117 }
-
let res = obj;
把
res
放在栈里,把res
也指向堆里的{ num1:117 }
-
obj.child = obj = { num2: 935 };
重点:赋值操作先定义变量(从左到右),再进行赋值(从右到左)
- 3.1定义变量:
obj.child
,给堆里的{ num1:117 }
加一个child
属性,得{num1:117,child:undefined}
- 3.2 定义变量obj
,之前在栈里的obj
,赋值obj = { num2: 935 }
,把{ num2: 935 }
放在堆里,把栈里的obj
指向堆里的{ num2: 935 }
- 3.3 赋值
obj.child = obj
,把堆里的{num1:117,child:undefined}
的child指向{num2: 935}
从最后一张图可看出此时:
js
obj = { num2: 935 }
res = { num1: 117,child:{ num2: 935 } }