百度HR給的JS面試題
阿新 • • 發佈:2019-02-08
說出以下程式碼執行結果
var a = {n: 1}
var b = a;
a.x = a = {n: 2}
console.log(a.x);
console.log(b.x)
輸出:
undefined
n:2解析:
var a = {n: 1} //
定義變數 a
為一個新物件,且這個新物件有一個值為 1
的 n
成員
var b = a; //
定義變數 b
,並且讓 b
也引用變數 a
的物件// 經過上面這兩句之後,變數 a 和 b 都引用了物件 {n:1}// 下面這句是問題的關鍵
a.x = a = {n: 2}
// a.x = 表示要給 a 引用的那個物件 {n:1} 的 x 成員賦值
// 實際上,此時變數 b 也引用了這個物件 {n:1}
// 此時,JavaScript引擎首先給 {n:1} 新增一個空的 x 成員,即:{n:1,x:undefined}
// 接下來要給{n:1,x:undefined}.x 賦的是什麼值呢?
// 要賦的值是 a = {n: 2}
// 也就是先讓變數 a 引用一個新的物件 {n:2}
// 然後再把 a 的新值賦給{n:1,x:undefined}.x
// 所以原來的那個物件變成了 {n:1,x:{n:2}}
// 由於變數 b 始終引用那個原來的物件,所以 b 的值是 {n:1,x:{n:2}}
// 由於變數 a 被賦予了一個新的物件,所以 a 的值是 {n:2}//
console.log(a.x); //變數 a 引用的物件是 {n:2},沒有 x 成員,所以輸出 undefined
console.log(b.x); // 變數 b 引用的物件是{n:1,x:{n:2}},所以輸出 {n:2}
需要web前端課程工具和電子書,可以加22群120342833