-
Notifications
You must be signed in to change notification settings - Fork 83
Open
Labels
Description
说明: 图画的很糙,大家明白意思就好,还有引用赋值是不是这样的,大家可以提出自己的意见和论证。
题目是这样的
var a = {n:1};
var b = a;
a.x = a = {n:2};
console.log(a.x); //undefined
console.log(b.x); //{n:2}接下来看下内存堆栈的演变
- 当经过
var a = {n:1};- 当经过
var a = {n:1};
var b = a;- 最后一句代码很关键,发生挺多事情
为了理解最后一句,先看下我总结的(自己瞎写的,无从考证),不成文的规定
比如 var a = b = c = d =1; 像这样的、栈里面的赋值是从右向左赋值的(栈是后进先出)
但是如果是引用对象,比如: var a = b = c = d = {n:123} 就是从左往右赋值的(引用是标记)。
一个不成文的约定,记住暂时。
所以上述最后一句代码,咱们可以拆成:
a.x = {n:2} 和
a = {n:2}- 当经过 a.x = {n:2}
- 最后经过 a = {n:2}, 把 a的指向换成了新的



