iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

從零開始的JS學習之路系列 第 14

[Day14] 傳值或傳址(上)

JavsScript 的資料型別分成兩大類,第一類是基本型別,第二類是物件型別,型別的介紹可以參考前面的文章,今天要來講的是兩種型別在記憶體上儲存的差異,分為傳值與傳址。

基本型別(primitive):資料以純值的形式存在。
物件型別(object):可能由零或多種不同型別(含純值與物件)所組成的物件。--008

今天先來講基本型別的傳值概念

舉例如下情況:
比較基本型別得到結果是 true,而比較物件型別結果卻是 false。因 a、b 這兩個變數屬基本型別所以判斷的是他的值;obj1 跟 obj2 是物件型別,因各別宣告記憶體位置不同,所以才會有 false 的結果。

// 基本型別
var a = 10;
var b = 10;
console.log(a === b); // true

// 物件型別
var obj1 = { value: 10 };
var obj2 = { value: 10 };
console.log(obj1 === obj2); // false

變數的更新與傳遞(基本型別)

在基本型別中複製變數,複製的是那個變數的值,所以 a 重新賦值的時候不影響 b:

var a = 10;
var b = a;
a = 20;

console.log(a); // 20
console.log(b); // 10,為什麼 b = a,結果 b 不是 20?

b 複製 a 的時候是指向同一個 stack,

當 a 重新賦值,實際上舊的值會留著不會被修改,然後記憶體會新增一個位址指向 20,

圖畫出來是不是好理解多了
明天再來談傳址

參考資料
JavaScript’s Memory Model
008天重新認識JavaScript


上一篇
[Day13] Hoisting
下一篇
[Day15] 傳值或傳址(下)
系列文
從零開始的JS學習之路30

尚未有邦友留言

立即登入留言