1. 程式人生 > >百度HR給的JS面試題

百度HR給的JS面試題

說出以下程式碼執行結果

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