js中的連續賦值

最近在準備換工作的事情,面試中遇到js連續賦值的問題,在這裏做個總結。

下面是面試題目

// 面試題
var a = { n: 1 };
var b = a;
a.x = a = { n: 2 };

console.log(a);
console.log(b);
console.log(a.x);
console.log(b.x);

首先來看下js中基本類型的連續賦值是下面這樣:

var a = 1;
var b = a = 3;

js中賦值是從右到左的,所以上面的連續賦值可以分解爲下面這樣:

var a = 1;
a = 3;
var b = a;

所以最終,a = 3, b = 3.

但是面試題中的情況跟上面的不太一樣,存在運算的優先級,當'.'跟'='同時出現時,先進行'.'操作再做賦值操作也就是'='。所以面試題的連續賦值可以分解爲以下步驟:

// 面試題
var a = { n: 1 };
var b = a; // b = { n: 1 }
a.x = { n: 2 }; // a = { n: 1, x: { n: 2 } }, b = { n: 1, x: { n: 2 } }
a = { n: 2 };


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

劇終!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章