js連續賦值 指標

2022-08-13 03:42:10 字數 1043 閱讀 9532

jq的原始碼中有很多連續賦值,類似這樣的:

var a = ;  

var b = a; // 持有a,以回查

a.x = a = ;

alert(a.x);// --> undefined

alert(b.x);// --> [object object]

網上有很多解釋了,這裡我做一下記錄而已,化繁為簡,比較容易理解的過程是這樣的:

給,分別起名個實際持有這兩個記憶體位址的虛擬物件名字,比如:obj1 -》,obj2-》

1)var a = ;  //定義了乙個指標a指向記憶體中的,即a = obj1->

2)var b = a;//定義了b也指向了記憶體中的,即b = obj1->

3)a.x = ;//本質是obj1.x = ,即改變的是a和b所指向的物件

4)a = ;//a的指標指向了obj2,是乙個新的物件

現在的結果是:

a:a = obj2 = ;

b:b = obj1 =

簡單幾點摘抄:

1、求值順序:從左到右

2、運算子的結合性:右結合,但也是從左到右求值

主要解讀 a.x = a = ;  這句的執行順序

按照上面兩條的規則來看:

1)求值從左到右,那就是先給a.x賦值即a.x = expression

2)解讀一下此時的a.x指向誰,此時a指向obj1-》,即給obj1.x賦值變成了obj1.x = expression

3)左邊解析完了,進入「=」的右邊,是乙個表示式(a=),這裡為啥不是乙個光禿禿的a呢,即為啥不是這樣的順序a.x = a,主要根據第二條,右結合性,

會把a = 看成乙個整體解析(這時候a的指標指向了obj2),返回的是

4)賦值,obj1.x = obj2 = ,第3步在解析過程中已經把a的指標指向obj2了,因此a.x(obj2.x)根本沒有這個屬性,obj1才有

比較難理解的是第三步,明白幾點:首先不是先計算右邊的值(即不是先計算a = ),而是先解析左邊的規則(指標)a.x,解析成obj1.x之後,才開始到右邊,

JS 連續賦值運算

首先來看一段 1 2 3 var o o.b o alert o.b undefined 以上第二句 o.b o 是乙個連續賦值表示式。那麼在這個過程中究竟發生了什麼呢?在ecmascript 3rd 文件中有關於賦值表示式的解釋 the production assignmentexpressio...

JS基礎 連續賦值

問題 根據js引擎語法解析,會先去從左到右尋找有沒有未宣告的變數,如果有就把該變數提公升至作用域頂部並宣告該變數。那麼恭喜js引擎他找到a.x這個屬性沒有宣告,那麼他會在這個記憶體區宣告乙個x屬性等待賦值!語法解析完成後,開始進行運算 ps 賦值運算 首先將a變數的指標指向了乙個新的記憶體區,那麼a...

assign連續賦值

一些verilog書上說assign用在連續型賦值的 下面是功能相同但寫法不同的兩段 第一段a module assign test a clk,lhold,lholda input clk input lhold output lholda reg lholda always posedge cl...