美文网首页
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内存管理的堆和栈指向赋值问题

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