最近在準備換工作的事情,面試中遇到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 }
劇終!