var a = 2;
var b = a;
console.log(b); //2
a= 5;
console.log(b); //2
問:爲什麼變量「B」是越來越值2,即使變量a被分配不同的值價值變量賦值後不會得到更新
var a = 2;
var b = a;
console.log(b); //2
a= 5;
console.log(b); //2
問:爲什麼變量「B」是越來越值2,即使變量a被分配不同的值價值變量賦值後不會得到更新
原因號碼是不可改變的。
更改一個不可變的值,用一個新值替換原始值,因此原始值不會更改(這就是爲什麼b = 2
)。
如果需要一個引用,使用對象和/或陣列 var a ={value: 2}, b = a
a.value = 3 // also changes the value of be, since it can mutate
console.log(b)
返回2
因爲當您訪問直接在其值的工作基本類型。
在JavaScript中,基元(數字,布爾,字符串)是按值分配的,只有對象是通過引用分配的。
在Javascript中,整數是immutable
。這意味着一旦分配了對象的值就不能改變。當你做
a=5;
b=a;
這是事實,兩者是相同的對象,其值是5
的名字。 後來,當你做 -
a=2
它分配基準a
一個新的對象,其值爲2。所以基本上a
現在指向一個新的對象。 Ans存在兩個對象。
爲了更好地理解你可以參考這個link
在做在JavaScript 分配的原始值的:
據指出,這項任務並不配合a
和b
在一起是很重要的。實際上發生的一切都是從a
的值被複制到b
,所以當我們去更改a
時,我們不必擔心影響b
。這是因爲兩個變量由兩個不同的存儲位置支持 - 沒有交叉。
簡單的方法:
當分配b = a
其實你沒有複製a
變量的引用,使b
指向內存中的同一個變量的位置。
您只複製a
變量的值,並將其置於具有不同內存位置的新變量b
中。
當您設置b時,a爲2。 b是2. –
你在混淆JavaScript和Verilog。 – stark
'number'是一個原始數據類型,不是「參考」。請參閱https://stackoverflow.com/questions/13266616/primitive-value-vs-reference-value –