美文网首页
堆栈内存

堆栈内存

作者: maomizone | 来源:发表于2022-04-13 20:39 被阅读0次
    let a = { n: 1 }
    let b = a
    a.x = a = { n: 2 }
    console.log(a.x);
    console.log(b);
  1. 浏览器打开一个页面,首先会从计算机的虚拟内存中分配两块内存出来

栈内存Stack[ECStack] 执行上下文栈
    + 供代码执行
    + 存储声明的变量和基本数据类型的值

堆内存Heap
    + 存储对象类型的值

  1. 默认在堆内存中,开辟一个空间[16进制地址],GO(global object)全局对象,存储了浏览器为js提供的内置API

  2. 创建一个全局的执行上下文EC(G)
        + 供全局代码代码执行的环境
        + 进栈执行
    执行上下文就是栈内存空间,在代码执行过程中,遇到声明变量,需要一个存放变量的地方-->变量对象 VO(全局执行上下文的变量对象)/AO(函数执行上下文的活动对象)

堆栈内存.png
   let a = b = 12
   // 相当于
   b = 12
   let a = b

正常:从右到左计算,只有a是let声明,b不带let
特殊:遇到优先级高的则优先处理

  • 除了EC(G) 还有函数执行上下文EC(F)以及块执行上下文EC(Block),这个等我学完之后过来补上
    debugger
    var a = 12
    let b = 13

全局上下文中

  • 基于var function声明的变量,没有放在VO(G)中,直接存储于GO中,作为window的成员
  • 基于let const声明的变量,放在VO(G)中

图中的Script就是VO(G),Global就是GO

Snipaste_2022-04-13_20-57-27.png
    // 以下代码为js引擎执行RHS查询,先看VO(G)再看GO,都没有会报错Uncaught ReferenceError: a is not defined
    console.log(c);

    // 直接在GO找,找不到报错undefined
    console.log(window.c);

    // 则不会报错,这是LHS查询,在非严格模式下,全局作用域会在GO上创建一个属性d,并赋值为2
    d = 2

相关文章

  • 堆栈内存

    JS中的内存:堆内存和栈内存 堆内存是用来存储引用数据类型值的(例如:创建函数和创建对象,就像开辟一个堆内存,把代...

  • 堆栈内存

    浏览器打开一个页面,首先会从计算机的虚拟内存中分配两块内存出来 栈内存Stack[ECStack] 执行上下文栈+...

  • JS 堆栈内存

    堆栈内存的作用 JS 中的内存堆内存和栈内存,所有堆栈内存的处理,浏览器会自行在内部执行 栈内存: 提供一个供 J...

  • 内存中的堆栈和数据结构堆栈区别

    内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构...

  • Java内存中的数据存储结构

    内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构...

  • js core concepts

    内存分配,发生在堆栈中

  • 初识堆栈

    什么是堆栈 引出堆栈 在学习堆栈之前,我们需要从之前寄存器和内存中引出堆栈,我们要思考堆栈有什么必要性?现在假设我...

  • Go 堆栈的理解

    在讲Go的堆栈之前,先温习一下堆栈基础知识。 什么是堆栈?在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中堆栈...

  • C# 内存的理解 通俗说

    一.概念 堆栈是什么? 在说堆栈之前,先说说内存是神马? 内存:程序在运行的过程,电脑需要不断通过CPU进行计算,...

  • 堆栈

    堆栈设计图 堆栈优点 临时存储大量的数据,便于查找 push内存指令 POP指令

网友评论

      本文标题:堆栈内存

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