文章看自《写了10年Javascript未必全了解的连续赋值运算》,但是讲得不清楚,自己理解如下:
代码:
var a = {n:1};
a.x = a = {n:2};
console.log(a.x); // undefined
console.log(a); // {n:2}
解释:
连续赋值时,先将各个变量的字面量求为各自指针,比如步骤如下:
- 求得变量
a
所指之处地址,我们将它表示为ptr1
,求得变量a.x
所指之处地址,我们将它表示为ptr2
; - 连续赋值时,其实是从右往左,先将
ptr2
指向{n:2}
,再将ptr1
同样地指向{n:2}
。 - 此时变量
a
所指之处不存在x
这个指针,所以a.x
将会被回收,a
所指之处只有{n:2}
。
另外:
function fun(){
var a = b = 5;
}
fun();
console.log(a); // undefined
console.log(b); // 5
// fun函数内的b无var修饰,所以编译时,编译器将其标记为全局变量,所以全局域内可以访问到。