整理引用數據類型和堆內存的內容:
基本類型值:指的是保存在棧內存中的簡單數據段;
引用類型值:指的是那些保存在堆內存中的對象,意思是,變量中保存的實際上只是一個指針,這個指針指向內存堆中實際的值。
兩種類型值訪問方式的區別:
基本類型值:按值訪問,操作的是他們實際保存的值;
引用類型值:按引用訪問,當查詢時,我們需要先從棧中讀取內存地址,然後再順藤摸瓜地找到保存在堆內存中的值;
基本類型變量的複製:
從一個變量向一個變量複製時,會在棧中創建一個新值,然後把值複製到爲新變量分配的位置上,改變源數據不會影響到新的變量(互不干涉);
(棧內存中申請一塊新的區域做爲新變量,再把舊變量的值賦值到新變量的區域)
var a = 0;
var b = a;
實際在棧內存中,存在 兩個變量a和b分別 都等於 0;
引用類型變量的複製:
複製的是存儲在棧中的指針,將指針複製到棧中未新變量分配的空間中,而這個指針副本和原指針執行存儲在堆中的同一個對象,複製操作結束後,兩個變量實際上將引用同一個對象;因此改變其中的一個,將影響另一個;(兩個棧內存中的變量指向同一個堆內存的對象,改變任意其中一個的引用變量的值,既是改變堆內存中的對象內容。)
var a = [1,2,3];
var b = a;
b[1] = 3;
console.log(a[1]);
輸出結果爲 3;