說出以下代碼運行結果
var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.log(b.x) 輸出:undefinedn: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 成員,所以輸出 undefinedconsole.log(b.x); //變量 b引用的對象是{n:1,x:{n:2}},所以輸出 {n:2}
需要web前端課程工具和電子書,可以加22群120342833
新聞熱點
疑難解答