美文网首页
JS内存管理的堆和栈指向赋值问题

JS内存管理的堆和栈指向赋值问题

作者: infi_ | 来源:发表于2019-08-07 16:49 被阅读0次
timg.jpg

一般这里是最绕最容易迷路的地方
下面我用最大白话的方式给它解释清楚
题目是这样的

var a={n:1}
var b=a
a.x=a={n:2}
console.log(a)
console.log(b)

连续赋值之后 求现在的a 和b 的样子是什么样的
栈:系统自动分配 物理内存连续 x=1 x相当于酒店门牌号 1相当于住在里面的人 放进栈里。
堆::动态创建 物理内存不连续 x={n:1} 放进堆里面

这段赋值运行起来是什么流程呢
一般官方说法很绕口也很难懂
可以用大白话解释比较好懂
第一步 a相当于酒店的门牌号 由于里面是一个对象{n:1} 是一个复杂对象体积太大 所以放不下
里面只住着这个对象的指针也就是联系方式

第二步 b也是相当于酒店的门牌号 同上也住着指向对象的联系方式

第三步 也就是a={n:2}这一部分 改变了a房间的联系方式也就是指针 指向了一个新对象 此时b还是指向原来的老对象
此时b={n:1}
第四步 这一步相当关键 也就是会在原来的对象{n:1}上添加一个属性X 指向新的对象{n:2} 而此时b正指向原来的对象没变

此时b={n:1,x:{n:2}}
此时a={n:2}

这就是这个最简单的解释方法

相关文章

  • JS内存管理的堆和栈指向赋值问题

    一般这里是最绕最容易迷路的地方下面我用最大白话的方式给它解释清楚题目是这样的 连续赋值之后 求现在的a 和b 的样...

  • JS 垃圾回收

    内存 JS 数据的存储地址分为栈内存和堆内存。 栈内存 堆内存 在 JS 存放数据的内存中又分为高位和低位,其中高...

  • JS内存图

    画JS内存图可以有效的解决JS中的一些内存问题JS中内存分为2中:栈内存(Stack)跟堆内存(Heap)栈内存:...

  • Java中的强软弱虚引用,还有你知道为什么ThreadLocal

    Java中的类型引用 强软弱虚 强引用 栈内存指向了堆内存 当栈内存的m指向堆内存的new M(),当m=null...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • 堆栈内存和js代码执行

    1.堆栈内存是什么? 1)内存大概分4块, 栈内存存放基本变量和对象的引用, 堆内存存放对象,栈内存中的引用指向堆...

  • python中内存管理机制

    内存管理机制 1.堆和栈 内存区域中分为堆区间和栈区间栈区间的内存的开辟和释放是自动的堆区间的内存是手动的开辟和释...

  • js数组--window.Array和window.Functi

    window.Array和window.Function 标准库js内存栈内存和堆内存,栈内存有一个很重要的全局属...

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • js:栈内存和堆内存

    【声明:】本文是作者(蘑菇v5)原创,版权归作者 蘑菇v5所有,侵权必究。本文首发在简书。如若转发,请注明作者和来...

网友评论

      本文标题:JS内存管理的堆和栈指向赋值问题

      本文链接:https://www.haomeiwen.com/subject/qccadctx.html