亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

js隨手筆記-------理解JavaScript中的堆和棧

reclay / 2406人閱讀

摘要:最近由于做的項目需求牽扯到了大量的數(shù)據(jù)處理,于是就想了解一下中的數(shù)據(jù)類型,于是就百度了一下找到了些干貨,在這里精簡下做個筆記,以方便日后需要的時候查看這里先說兩個概念堆棧堆是堆內(nèi)存的簡稱。

最近由于做的項目需求牽扯到了大量的數(shù)據(jù)處理,于是就想了解一下javascript中的數(shù)據(jù)類型,于是就百度了一下找到了些干貨,在這里精簡下做個筆記,以方便日后需要的時候查看:
這里先說兩個概念:1、堆(heap)2、棧(stack)
是堆內(nèi)存的簡稱。
是棧內(nèi)存的簡稱。
說到堆棧,我們講的就是內(nèi)存的使用和分配了,沒有寄存器的事,也沒有硬盤的事。
各種語言在處理堆棧的原理上都大同小異。堆是動態(tài)分配內(nèi)存,內(nèi)存大小不一,也不會自動釋放。棧是自動分配相對固定大小的內(nèi)存空間,并由系統(tǒng)自動釋放。

javascript的基本類型就5種:Undefined、Null、Boolean、Number和String,它們都是直接按值存儲在棧中的,每種類型的數(shù)據(jù)占用的內(nèi)存空間的大小是確定的,并由系統(tǒng)自動分配和自動釋放。這樣帶來的好處就是,內(nèi)存可以及時得到回收,相對于堆來說,更加容易管理內(nèi)存空間。

javascript中其他類型的數(shù)據(jù)被稱為引用類型的數(shù)據(jù) : 如對象(Object)、數(shù)組(Array)、函數(shù)(Function) …,它們是通過拷貝和new出來的,這樣的數(shù)據(jù)存儲于堆中。其實,說存儲于堆中,也不太準(zhǔn)確,因為,引用類型的數(shù)據(jù)的地址指針是存儲于棧中的,當(dāng)我們想要訪問引用類型的值的時候,需要先從棧中獲得對象的地址指針,然后,在通過地址指針找到堆中的所需要的數(shù)據(jù)。

說來也是形象,棧,線性結(jié)構(gòu),后進先出,便于管理。堆,一個混沌,雜亂無章,方便存儲和開辟內(nèi)存空間
傳值與傳址

var arr1 = [1,2,5,8]; 
var arr2 = arr1 ; 
var str1 = arr1[2]; 
console.log(arr2);//1,2,5,8
console.log(str1);//5
arr2[4] = 99; 
str1 = 6; 
console.log(arr1);//1,2,5,8,99
console.log(arr1[2]);//5

上方例子得知,當(dāng)我改變arr2中的數(shù)據(jù)時,arr1中數(shù)據(jù)也發(fā)生了變化,當(dāng)改變str1的數(shù)據(jù)值時,arr1卻沒有發(fā)生改變。為什么?這就是傳值與傳址的區(qū)別。

因為arr1是數(shù)組,屬于引用類型,所以它賦予給arr2的時候傳的是棧中的地址(相當(dāng)于新建了一個不同名“指針”),而不是堆內(nèi)存中的對象的值。str1得到的是一個基本類型的賦值,因此,str1僅僅是從arr1堆內(nèi)存中獲取了一個數(shù)值,并直接保存在棧中。arr1、arr2都指向同一塊堆內(nèi)存,arr2修改的堆內(nèi)存的時候,也就會影響到arr1,str1是直接在棧中修改,并且不能影響到arr1堆內(nèi)存中的數(shù)據(jù)。

淺拷貝和深拷貝
上邊說到的賦值方式就是淺拷貝,那么什么叫作深拷貝呢?就是要將arr1的每個基本類型的數(shù)據(jù)都遍歷一遍,依次的賦值給arr2的對應(yīng)字段。避免產(chǎn)生因為地址引用帶來的問題。

var arr1 = [1,2,5,8]; 
var arr2 = []; 
for(var i=0;i

javascript面向?qū)ο蟮恼Z言本身在處理對象和非對象上就進行了劃分,從數(shù)據(jù)結(jié)構(gòu)的角度來講,對象就是棧的指針和堆中的數(shù)值。

本文內(nèi)容借鑒自
鏈接:https://www.jianshu.com/p/5e0...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/96493.html

相關(guān)文章

  • 和棧

    摘要:百度百科上對堆和棧進行了對比分析堆??臻g分配棧操作系統(tǒng)由操作系統(tǒng)自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。堆棧緩存方式棧使用的是一級緩存,他們通常都是被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放。顯然,堆的效率比棧要低得多。 相信很多程序員對于堆和棧的概念,總是感覺很朦朧,感覺在哪里聽過見過,并沒有深交。 在計算機領(lǐng)域,堆棧是一個不容忽視的概念,我們編寫的C語言程序基本上都要用到。但...

    lscho 評論0 收藏0
  • 理解前端數(shù)據(jù)類型

    摘要:基本數(shù)據(jù)類型的值保存在棧內(nèi)存中的簡單數(shù)據(jù)段,按值訪問。文字常量區(qū)存儲常量字符串保存在棧中保存在棧中,保存在常量區(qū)程序代碼區(qū)存儲程序的二進制代碼關(guān)于數(shù)字類型根據(jù)關(guān)于的描述可知,的數(shù)字類型只有一種,使用標(biāo)準(zhǔn)中的雙精度浮點數(shù)來存儲,長度為位。 數(shù)據(jù)類型 基本數(shù)據(jù)類型:String,Boolean,Number,undefined,null,Symbol(ES6)引用數(shù)據(jù)類型:Object,F(xiàn)...

    wums 評論0 收藏0
  • 基礎(chǔ)回顧-javascript數(shù)據(jù)類型

    摘要:棧區(qū)由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。屬性返回對創(chuàng)建此對象的構(gòu)造函數(shù)的引用。所有的和都是宿主對象參考高級程序設(shè)計堆和棧的概念和區(qū)別全面解析中的數(shù)據(jù)類型與類型轉(zhuǎn)換 數(shù)據(jù)類型 數(shù)據(jù)類型劃分 javascript中定義了6中基本數(shù)據(jù)類型(原始值類型),和一種復(fù)雜數(shù)據(jù)類型(引用類型),所謂復(fù)雜類型,其本質(zhì)是由無序的名值對(key:val...

    codergarden 評論0 收藏0
  • javascript高級程序設(shè)計》筆記:內(nèi)存與執(zhí)行環(huán)境

    摘要:因此,所有在方法中定義的變量都是放在棧內(nèi)存中的當(dāng)我們在程序中創(chuàng)建一個對象時,這個對象將被保存到運行時數(shù)據(jù)區(qū)中,以便反復(fù)利用因為對象的創(chuàng)建成本通常較大,這個運行時數(shù)據(jù)區(qū)就是堆內(nèi)存。 上一篇:《javascript高級程序設(shè)計》筆記:繼承近幾篇博客都會圍繞著圖中的知識點展開 showImg(https://segmentfault.com/img/bVY0C4?w=1330&h=618);...

    fuyi501 評論0 收藏0
  • JAVA中和棧的區(qū)別

    摘要:堆內(nèi)存主要作用是存放運行時創(chuàng)建的對象。堆內(nèi)存用來存放由創(chuàng)建的對象和數(shù)組,在堆中分配的內(nèi)存,由虛擬機的自動垃圾回收器來管理。這也是比較占內(nèi)存的原因,實際上,棧中的變量指向堆內(nèi)存中的變量,這就是中的指針 堆:(對象) 引用類型的變量,其內(nèi)存分配在堆上或者常量池(字符串常量、基本數(shù)據(jù)類型常量),需要通過new等方式來創(chuàng)建。 堆內(nèi)存主要作用是存放運行時創(chuàng)建(new)的對象。(主要用于存放對象,...

    RyanQ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<