<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 棧與堆 JavaScript中并沒有嚴格意義上區分棧內存與堆內存。因此我們可以粗淺的理解為JavaScript的所有數據都保存在堆內存中。但是在某些場景,我們仍然需要基于堆棧數據結構的思路進行處理,比如JavaScript的執行上下文。 ## 棧 乒乓球的存放方式與棧中存取數據的方式如出一轍。處于盒子中最頂層的乒乓球5,它一定是最后被放進去,但可以最先被使用。而我們想要使用底層的乒乓球1,就必須將上面的4個乒乓球取出來,讓乒乓球1處于盒子頂層。這就是棧空間先進后出,后進先出的特點。圖中已經詳細的表明了棧空間的存儲原理。 ![](https://box.kancloud.cn/22426b639687d425fe8d26627682e2d1_700x550.png) ## 堆 書雖然也整齊的存放在書架上,但是我們只要知道書的名字,我們就可以很方便的取出我們想要的書,而不用像從乒乓球盒子里取乒乓一樣,非得將上面的所有乒乓球拿出來才能取到中間的某一個乒乓球。好比在JSON格式的數據中,我們存儲的`key-value`是可以無序的,因為順序的不同并不影響我們的使用,我們只需要關心書的名字。 <br> <br> # 變量對象與基礎數據類型 JavaScript的執行上下文生成之后,會創建一個叫做變量對象的特殊對象,JavaScript的基礎數據類型往往都會保存在變量對象中。 基礎數據類型都是一些簡單的數據段,JavaScript中有5中基礎數據類型,分別是`Undefined、Null、Boolean、Number、String`。基礎數據類型都是按值訪問,因為我們可以直接操作保存在變量中的實際的值。 > 嚴格意義上來說,變量對象也是存放于堆內存中,但是由于變量對象的特殊職能,我們在理解時仍然需要將其于堆內存區分開來。 <br> <br> # 引用數據類型與堆內存 JS的引用數據類型,比如數組Array,它們值的大小是不固定的。引用數據類型的值是保存在堆內存中的對象。JavaScript不允許直接訪問堆內存中的位置,因此我們不能直接操作對象的堆內存空間。在操作對象時,實際上是在操作對象的引用而不是實際的對象。因此,引用類型的值都是按引用訪問的。這里的引用,我們可以粗淺地理解為保存在變量對象中的一個地址,該地址與堆內存的實際值相關聯。 ~~~ var a1 = 0; // 變量對象 var a2 = 'this is string'; // 變量對象 var a3 = null; // 變量對象 var b = { m: 20 }; // 變量b存在于變量對象中,{m: 20} 作為對象存在于堆內存中 var c = [1, 2, 3]; // 變量c存在于變量對象中,[1, 2, 3] 作為對象存在于堆內存中 ~~~ ![](https://box.kancloud.cn/2ef5be1975cc30f2aec4ea63c4a6bb99_700x400.png) 因此當我們要訪問堆內存中的引用數據類型時,實際上我們首先是從變量對象中獲取了該對象的地址引用(或者地址指針),然后再從堆內存中取得我們需要的數據。 <br> <br> # 內存空間管理 JavaScript的內存生命周期 ~~~ 1. 分配你所需要的內存 2. 使用分配到的內存(讀、寫) 3. 不需要時將其釋放、歸還 ~~~ <br> <br> # 參考資料 * [JS內存空間詳細圖解](https://www.cnblogs.com/lsgxeva/p/7976019.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看