美文网首页
2.JS-堆栈内存

2.JS-堆栈内存

作者: 程序萌 | 来源:发表于2020-08-18 18:15 被阅读0次
  • 栈内存(stack)
    存放常量 基本类型值, 如a=12 这个12就放在栈中
  • 堆内存(heap)
    只有一个作用,专门用来存储引用类型值,引用类型值:function、数组、 对象、 sysboml
    所有堆内存都有一个可被后续查找的16进制地址
    后续关联赋值的时候,是把堆内存地址给予变量操作的
  • GO:全局对象(Global Object)可以理解就是window
let globalObject = {
   Math:{},
   String:{},
   document:{},
   ...
   window:this
}
  • ECStack:Execution [ˌeksɪˈkjuːʃn] Context Stack 执行环境栈

  • EC:Execution Context 执行环境(执行上下文)
    用来执行我们写的代码,按顺序进栈执行

  • VO:Varibale Object 变量对象(理解成全局的变量对象)
    *AO:Activation Object 活动对象(函数的叫做AO,理解为VO的一个分支)(也可理解为是函数执行栈中的变量对象

  • Scope:作用域,创建的函数的时候就赋予的

  • Scope Chain :作用域链

总结图

image.png

内存释放机制

  • 谷歌浏览器 -- 垃圾回收机制(内存释放机制)
    谷歌浏览器会在空闲的时候,把所有不被占用的堆内存,进行释放和销毁
  • IE浏览器-- 引用计数的机制
    当前堆被占用一次,就记数字1,再被占用一次,就数字累加1,当然取消占用,就数字减去1,一直到减到0则销毁释放

实践

image.png
  • 变量赋值3步
  • 1.创建变量 声明declare
  • 2.创建值:
    • 2-1:基本类型值,在栈中创建存储
    • 2-2:引用类型值:
      - 在堆中开辟空间
      - 开辟一个存储对象中键值对(存储函数中的代码)的空间"堆内存"
      - 所有堆内存都有一个可被后续查找的16进制地址
      - 后续关联赋值的时候,是把堆内存地址给予变量操作的
  • 3 让变量和值关联起来(赋值) 定义defined
  • 举例
let a = 12;
let b = a;
b = 13;
console.log(a);

第一行代码 let a = 12

1.代码进入EC(G)全局代码执行上下文,然后在全局EC(G) global全局对象中声明a
2.因为12是基本类型值,直接在栈中创建存储
3.让变量和值关联在一起 赋值
image.png

第二行代码 let b = a;

1.代码进入EC(G)全局代码执行上下文,然后在全局EC(G) global全局对象中声明b
2.因为赋值是个变量,所以指向变量指向的值,不在重新创建
3.让b关联a的值12
image.png

第三行代码 b = 13;

1.创建值时,只要是基本类型值,都需要重新创建,即时有相等的,
例如如果创建的不是13而是12,那也会重新创建一个12
2.因为变量只能指向一个值,所以把原来指向12值,改成指向13值
3.所有输出结果 a = 12  b= 13
image.png

相关文章

  • 2.JS-堆栈内存

    栈内存(stack)存放常量 基本类型值, 如a=12 这个12就放在栈中 堆内存(heap)只有一个作用,专门用...

  • 堆栈内存

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

  • 堆栈内存

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

  • JS 堆栈内存

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

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

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

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

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

  • js core concepts

    内存分配,发生在堆栈中

  • 初识堆栈

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

  • Go 堆栈的理解

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

  • C# 内存的理解 通俗说

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

网友评论

      本文标题:2.JS-堆栈内存

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