引用類型數據:javascript
也就是對象類型Object type,好比:Object 、Array 、Function 、Data等。
java
javascript的引用數據類型是保存在堆內存中的對象。函數
與其餘語言的不一樣是,你不能夠直接訪問堆內存空間中的位置和操做堆內存空間。只能操做對象在棧內存中的引用地址。性能
因此,引用類型數據在棧內存中保存的其實是對象在堆內存中的引用地址。經過這個引用地址能夠快速查找到保存中堆內存中的對象。指針
var obj1 = new Object();對象
var obj2 = obj1;blog
obj2.name = "我有名字了";ip
console.log(obj1.name); // 我有名字了內存
說明這兩個引用數據類型指向了同一個堆內存對象。obj1賦值給onj2,實際上這個堆內存對象在棧內存的引用地址複製了一份給了obj2,io
可是實際上他們共同指向了同一個堆內存對象。實際上改變的是堆內存對象。
下面咱們來演示這個引用數據類型賦值過程:
與上一章的基本數據類型的區別
a 聲明變量時不一樣的內存分配:
1)原始值:存儲在棧(stack)中的簡單數據段,也就是說,它們的值直接存儲在變量訪問的位置。
這是由於這些原始類型佔據的空間是固定的,因此可將他們存儲在較小的內存區域 – 棧中。這樣存儲便於迅速查尋變量的值。
2)引用值:存儲在堆(heap)中的對象,也就是說,存儲在變量處的值是一個指針(point),指向存儲對象的內存地址。
這是由於:引用值的大小會改變,因此不能把它放在棧中,不然會下降變量查尋的速度。相反,放在變量的棧空間中的值是該對象存儲在堆中的地址。
地址的大小是固定的,因此把它存儲在棧中對變量性能無任何負面影響。
b 不一樣的內存分配機制也帶來了不一樣的訪問機制