變數會被處存到你所依賴的環境上,說白話文就是被存在記憶體裡,在更簡單的來說,就是 JavaScript 會將他放在一個方便找尋且操作的地方,雖然大部分時間,這其實不是我們關心的事,但很多時候這個冷漠,就會將我們帶入永劫不復的深淵(物理上),因此在這邊就讓我們稍微了解一下吧!
var name = 'Me';
// 印出整個 window 物件
console.log(window);
console.log(window.name); // Me
上面的範例是將整個網站的內容列印出來(整個網站就是一個巨大的物件),可以在這之中發現我們所定義的變數,但這裡其實只是因為 var 的性質,他的定義方式與 Window 物件相互掛鉤,導致他在最外層被設定成全域變數,實際上他的實體會在記憶體當中(其實理論上全部的東西都在記憶體)。
有時我們會喜歡進行一些複雜的設計,此時我們將很常把一個變數賦予另一個變數,已達成我們想要的功能,而此時就會出現兩種不同的情況,我們可以在下面的範例中一探究竟。
// 賦值操作
var name = 'IFFY';
var noName = name;
name = 'No name';
console.log(noName); // IFFY
console.log(name); // No name
當我們使用六個基本型別進行變數宣告的時候,JavaScript 均會直接將數值傳過去,因此新的變數就不會有舊的資料有任何關聯了
// 賦值操作
var nameArray = ['Iffy', 'Alex'];
var newNameArray = nameArray;
newNameArray.push('Eva');
console.log(nameArray); //['Iffy', 'Alex', 'Eva']
但當我們使用物件型別的時候,事情就開始不一樣了,因為物件的結構可能會非常複雜,因此他會將「記憶體位置」傳送過去,因此用此方法實作之後,兩個 Array 之間會互相影響。