基礎數據結構及js數據存儲

        由於之前前端開發跟數據存儲打交道比較少,javascript又具備自動垃圾回收機制。數據結構以及存儲相關的概念,實際上是很容易被前端er忽略的。可是由於如今大前端的趨勢,其實慢慢地,這些概念對於一個前端er來講也成了必需要掌握的技巧。
        瞭解這些概念,對於咱們去理解基本數據類型,引用數據類型,閉包,原型,原型鏈,事件循環等都有很好的促進做用。
        接下來,咱們先了解堆(heap),棧(stack),隊列(queue)這三種數據結構,再來分析js數據存儲相關的概念。
        1 數據結構javascript

        1.1 棧 棧是一種先進後出的數據結構。
        數據進入棧中以後,會被壓到棧底。相似於咱們日常用的羽毛球球管的概念,第一個進去的是在球管的管低,第一個出來的是位於球管管頂的最後一個進去的羽毛球。 這個概念會在咱們以後須要講到的執行上下文中用到。
圖片描述前端

        
        1.2 堆 是一種樹狀的數據結構,跟書架相似。
        咱們在書架取書的時候是不須要知道書的內容的,只須要知道書名就知道須要取的是哪本書了。
圖片描述java

        1.3 隊列 是一種先進先出(FIFO)的數據結構。
        就像咱們過安檢,誰排第一個誰就第一個接受安檢。這塊的概念主要是在事件循環機制中用到,能夠更好的幫咱們理解事件循環機制。
圖片描述數據結構

        好啦,介紹完咱們的基本數據結構,接下來就要詳細介紹js中的數據存儲方式了。閉包

        2 js數據存儲spa

        2.1 基礎數據類型及變量對象3d

        咱們都知道js中基礎數據類型包括undefined,null,boolean,string,number。這些數據類型都是存儲在變量對象中的,咱們都是按值訪問,能夠直接操做保存在變量中的值。對象

        其實,變量對象嚴格意義上來講也是存儲在對內存中的,可是爲了方便理解,咱們仍是須要對他和堆內存作區分。blog

        2.2 引用數據類型及堆內存
        引用數據類型是保存在堆內存中的對象,他的大小是不固定的。而js是不容許直接操做對象的堆內存空間的。咱們實際操做對象的時候,是在操做對象的引用。所謂引用,能夠理解成堆內存內對象的地址,給外界一個操做的入口。就像咱們日常寫信,郵遞員都是按照地址去派發信件的。
        2.3 數據存儲圖解
        以下所示代碼,咱們定義了4個基礎數據類型,定義了2個引用數據類型。基礎數據類型在變量對象裏能夠直接對應對應的值,而引用數據類型是存儲在堆裏的,在變量對象中對應的是堆內存的地址。
圖片描述
圖片描述隊列

        而要真正理解引用數據類型,咱們能夠看下下面的賦值操做。
        由於a是基礎數據類型,c是引用數據。c會有一個引用指向在堆裏面真正的對象。
圖片描述
圖片描述

如今,咱們進行復制操做,把a的值複製給b的時候,是把a真正的值賦值給了b。可是,將c複製給d的時候,是把c的引用賦值給了d。如代碼下方的圖示。
圖片描述
圖片描述

        所以,當咱們修改b的值的時候,是不會影響a的值,可是修改c的值的時候,會影響d的值。由於咱們修改c本質上是修改了堆內存裏的數據。

相關文章
相關標籤/搜索