JavaScript 中的 Call by sharing
Call by value、Call by reference在一般的程式語言中是常見的基本觀念,但在JavaScript中多了一項Call by sharing,這裡做個簡單的說明。 1. Data Type JavaScript 的資料類別可以分為: 基本型別(Primitive):string、number、boolean、null、undefined 物件型別(Object):object、symbol 基本型別會以純值的形式存在,而物件型別則是由零或不同型別的值所組成。 這邊之所以提及 Data Type 是因為資料類別會決定 call by value、call by reference、call by sharing 的運作時機。 2. 變數的真實樣貌 在提到 call by value 之前,我們先簡單講解平常看到的「變數」在程式中的真實樣貌。 當我們宣告一個變數時,如:let num = 1234,程式會自動分配一份記憶體空間,空間內部可以存放我們想要的資料,並且給予該空間一個名字。 以這段程式碼為例,num便是記憶體空間的名字(variable name),123是變數初始化後內部所存放的資料(variable value),另外還有我們平常看不到,用來標注空間所在位置的記憶體地址(memory address)。 3. 基本型別 & 物件型別 變數作為一個資料容器,當內部儲存的數值是基本型態時進行比較: let a = "Dog"; let b = "Dog"; let c = "Cat"; // 變數之間進行數值比較 console.log(a === b); //true console.log(b === c); //false 基本型態下兩者的比較結果可想而知,比較式會取出兩變數內的「值」進行比較,但是當變數內部儲存的值是物件型態時,比較結果會有所不同:...