JavaScript连续赋值运算之己见

文章看自《写了10年Javascript未必全了解的连续赋值运算》,但是讲得不清楚,自己理解如下:

代码:

var a = {n:1};  
a.x = a = {n:2};  
console.log(a.x); // undefined
console.log(a); // {n:2}

解释:

连续赋值时,先将各个变量的字面量求为各自指针,比如步骤如下:

  1. 求得变量 a 所指之处地址,我们将它表示为 ptr1,求得变量 a.x 所指之处地址,我们将它表示为 ptr2
  2. 连续赋值时,其实是从右往左,先将 ptr2 指向 {n:2} ,再将 ptr1 同样地指向 {n:2}
  3. 此时变量 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修饰,所以编译时,编译器将其标记为全局变量,所以全局域内可以访问到。

推荐阅读更多精彩内容