成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript棧內(nèi)存和堆內(nèi)存

kevin / 1835人閱讀

摘要:棧內(nèi)存和堆內(nèi)存中的變量分為基本類型和引用類型基本類型是保存在棧內(nèi)存中的簡單數(shù)據(jù)段,它們的值都有固定的大小,保存在棧空間,通過按值訪問引用類型是保存在堆內(nèi)存中的對象,值大小不固定,棧內(nèi)存中存放的該對象的訪問地址指向堆內(nèi)存中的對象,不允許直接訪

棧內(nèi)存和堆內(nèi)存
JavaScript中的變量分為基本類型和引用類型

基本類型是保存在棧內(nèi)存中的簡單數(shù)據(jù)段,它們的值都有固定的大小,保存在??臻g,通過按值訪問

引用類型是保存在堆內(nèi)存中的對象,值大小不固定,棧內(nèi)存中存放的該對象的訪問地址指向堆內(nèi)存中的對象,JavaScript不允許直接訪問堆內(nèi)存中的位置,因此操作對象時(shí),實(shí)際操作對象的引用

結(jié)合代碼與圖來理解
let a1 = 0; // 棧內(nèi)存
let a2 = "this is string" // 棧內(nèi)存
let a3 = null; // 棧內(nèi)存
let b = { x: 10 }; // 變量b存在于棧中,{ x: 10 }作為對象存在于堆中
let c = [1, 2, 3]; // 變量c存在于棧中,[1, 2, 3]作為對象存在于堆中

當(dāng)我們要訪問堆內(nèi)存中的引用數(shù)據(jù)類型時(shí)

從棧中獲取該對象的地址引用

再從堆內(nèi)存中取得我們需要的數(shù)據(jù)

基本類型發(fā)生復(fù)制行為
let a = 20;
let b = a;
b = 30;
console.log(a); // 20

結(jié)合下面圖進(jìn)行理解:

在棧內(nèi)存中的數(shù)據(jù)發(fā)生復(fù)制行為時(shí),系統(tǒng)會自動為新的變量分配一個(gè)新值,最后這些變量都是相互獨(dú)立互不影響的

引用類型發(fā)生復(fù)制行為
let a = { x: 10, y: 20 }
let b = a;
b.x = 5;
console.log(a.x); // 5

引用類型的復(fù)制,同樣為新的變量b分配一個(gè)新的值,保存在棧內(nèi)存中,不同的是,這個(gè)值僅僅是引用類型的一個(gè)地址指針

他們兩個(gè)指向同一個(gè)值,也就是地址指針相同,在堆內(nèi)存中訪問到的具體對象實(shí)際上是同一個(gè)

因此改變b.x時(shí),a.x也發(fā)生了變化,這就是引用類型的特性

結(jié)合下圖理解

總結(jié)

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

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

相關(guān)文章

  • JS數(shù)據(jù)類型 與 內(nèi)存

    摘要:所以相對于簡單數(shù)據(jù)類型而言,他們占用內(nèi)存比較小,如果放在堆中,查找會浪費(fèi)很多時(shí)間,而把堆中的數(shù)據(jù)放入棧中也會影響棧的效率。六總結(jié)本文總結(jié)了數(shù)據(jù)類型及其聲明賦值更新時(shí)在內(nèi)存堆棧中的表現(xiàn),可以更深入的理解這些數(shù)據(jù)類型。 JS數(shù)據(jù)類型 與 內(nèi)存堆棧 一、前言 JS的數(shù)據(jù)類型已經(jīng)是大家都很熟悉的東西了,但是大家是否對這些數(shù)據(jù)類型在內(nèi)存中的分配了解,甚至在操作這些變量時(shí),內(nèi)存中是如何表現(xiàn)的,本文...

    nodejh 評論0 收藏0
  • 【js】基本類型和引用類型

    摘要:基本類型基本類型的比較就是值的比較訪問是訪問值本身不能定義方法和屬性保存在棧內(nèi)存中引用類型除了基本類型外,就是引用類型了。 基本類型 1、number2、string3、boolean4、symbol5、undefined6、null基本類型的比較就是值的比較;訪問是訪問值本身;不能定義方法和屬性;保存在棧內(nèi)存中 引用類型 JavaScript除了基本類型外,就是引用類型了。如Arra...

    Dogee 評論0 收藏0
  • 淺談JavaScript的淺拷貝與深拷貝

    摘要:引用數(shù)據(jù)類型是存放在堆內(nèi)存中的,變量實(shí)際上是一個(gè)存放在棧內(nèi)存的指針,這個(gè)指針指向堆內(nèi)存中的地址。棧和堆的區(qū)別其實(shí)淺拷貝和深拷貝的主要區(qū)別就是數(shù)據(jù)在內(nèi)存中的存儲類型不同。這里,對存在子對象的對象進(jìn)行拷貝的時(shí)候,就是深拷貝了。 數(shù)據(jù)類型 在開始拷貝之前,我們從JavaScript的數(shù)據(jù)類型和內(nèi)存存放地址講起。數(shù)據(jù)類型分為基本數(shù)據(jù)類型 和引用數(shù)據(jù)類型 基本數(shù)據(jù)類型主要包括undefin...

    娣辯孩 評論0 收藏0
  • JS中函數(shù)參數(shù)值傳遞和引用傳遞

    摘要:學(xué)習(xí)中函數(shù)參數(shù)值傳遞和引用傳遞的學(xué)習(xí)中函數(shù)參數(shù)值傳遞和引用傳遞在紅寶書中說到,中所有函數(shù)的參數(shù)都是按值傳遞的。 學(xué)習(xí)JS中函數(shù)參數(shù)值傳遞和引用傳遞的學(xué)習(xí) JS中函數(shù)參數(shù)值傳遞和引用傳遞 在JavaScript紅寶書中說到,ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的。理解這個(gè)概念先要從JS的堆內(nèi)存和棧內(nèi)存說起:棧內(nèi)存為自動分配的內(nèi)存空間,它由系統(tǒng)自動釋放;堆內(nèi)存則是動態(tài)分配的內(nèi)存...

    ZHAO_ 評論0 收藏0
  • Java內(nèi)存模型

    摘要:內(nèi)存模型指定了如何與計(jì)算機(jī)內(nèi)存協(xié)同工作。內(nèi)部的內(nèi)存模型內(nèi)存模型在內(nèi)部使用,將內(nèi)存分為了線程棧和堆。下面的圖從邏輯角度給出了內(nèi)存模型每個(gè)運(yùn)行在內(nèi)部的線程都有自己的線程棧。部分線程棧和堆可能在某些時(shí)候會占用緩存和內(nèi)部寄存器。 Java內(nèi)存模型指定了JVM如何與計(jì)算機(jī)內(nèi)存協(xié)同工作。JVM是整個(gè)計(jì)算機(jī)的模型因此這個(gè)模型包含了內(nèi)存模型,也就是Java內(nèi)存模型。 如果你像要設(shè)計(jì)正確行為的并發(fā)程序,...

    fantix 評論0 收藏0

發(fā)表評論

0條評論

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