js語言的一大特色就是「軟」變量,js變量鬆散決定了其實var只是聲明瞭變量,只是在內存中給變量開闢了空間而已,這個特點從某種角度來看是很是有趣而強大的可是又特別容易產生問題
咱們以前在講變量的時候提到了基本類型和引用類型,此次咱們回去深入的討論一下二者之間有什麼區別,基本類型是指的簡單的數據段,而引用類型則是多個數據段組成的對象;基本類型是「棧」,先進如棧內的變量最早被釋放掉(內存中)。引用類型是「堆」,全部的引用類型內存中須要單獨給開闢一個內存空間去存儲。「棧」只是「堆」中數據的索引而已,js不容許直接訪問內存中的位置,也就是說不能直接操做內存空間this
畫了一個很醜的圖,你們湊合着看
定義基本類型和引用類型的方式是類似的,建立一個變量而且爲該變量賦值,當這個值保存到變量中去的時候,對不一樣類型的變量的操做是徹底不同的,對於引用類型咱們能夠爲他添加熟悉和方法,也能夠刪除屬性和方法
上面是一個簡單的引用類型
我給引用類型加了一個屬性叫「name」,這個屬性使用key=value的形式寫出來的。key值是「name」,value是「jerry」
我又給引用類型添加了一個方法,方法名字叫「sayName」,方法的用處是alert出來本身的名字,這個this.name前面的this指向的是方法的環境自己,若是這裏比較抽象沒有關係咱們接下來會用很大的篇章去講解this的用法
我調用了這個引用變量中的方法
注意若是這個對象不被手動的銷燬或者關閉當前頁面,變量中的屬性一直存在着,這個特性只有引用變量存在,普通變量保存不下來任何的屬性
咱們創造了一個普通變量
嘗試給創造出來的obj賦值一個「a」屬性,可是當咱們賦值完了以後二次查看a屬性的時候發現a屬性並無被保留下來(undefined) 這幾章的概念性的東西比較多,我儘可能分紅5到6章去講完,細緻的給你們過一遍