題目如下:
var a=;這道題考查了兩個知識點:1:記憶體空間 2:運算子的優先順序var b=a;
a.x=a=;
console.log(a.x);
console.log(b.x);
關於運算子知識點:
題目解析:
首先變數a指向物件,變數b也指向物件,都指向同乙個物件
接下來由於a.x中的.的優先順序高於=
所以第一步執行a.x,此時a指向的物件新增了乙個x屬性,變成了,此時b依然指向這個物件
接下來繼續分析a.x=a=;
賦值的結合性是從右到左,所以以上式子等價於a.x=(a=);
先執行a=,此時堆記憶體重新開闢一塊空間存放物件,a就指向了新的記憶體空間,而b指向原來的記憶體空間
右側的=執行完以後繼續執行左邊的賦值運算
a(舊).x=a( 新)=,因為a( 新)=返回a(新)本身,所以a(舊).x=a(新)
因此:
var a=;var b=a;
a.x=a=;
console.log(a.x); //undefined
console.log(b.x); //
面試題 運算子優先順序
include using namespace std int main 首先是運算子優先順序 和 優先順序順序是怎樣的 運算子優先順序和口訣 一共有十五個優先順序 1 2 負號 取變數位址 type 強制型別 sizeof 3 4 5 6 7 8 9 10 11 12 13 14 15 結合性 2...
運算子 及 運算子優先順序
數 算符 7個 1 為求餘運算子 例如 3 2 1 8 3 2 2 和 為自加1和自減1運算子。3 i 和 i都是加1運算。如 i 和 i 等於 i i 1 i i i i的意義和i i完全不一樣,可以這樣 理解,加 號在前面的先進行加1運算再賦值,加號在 後面 的 先進行賦 值在加1運算。如int...
運算子優先順序 C 運算子優先順序
c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...