美文网首页web前端
1.12 堆栈内存和数据类型区别

1.12 堆栈内存和数据类型区别

作者: NULL_2022 | 来源:发表于2020-08-04 16:27 被阅读0次
let a = 12;
let b = a;
    b = 13;
console.log(a); //=> 12
let n = {
    name : 'xiaoli'
};
let m = n;
    m.name = 'xiaoxiao';
console.log(n.name); //=> xiaoxiao

解析:

    1. 在浏览器中打开页面,浏览器引擎会渲染相关的代码(包含JS代码),换句话说,会把代码自上而下执行
    1. 浏览器想要执行代码,会提供一个供代码执行的环境,把环境叫做:ECStack(Execution Context Stack 执行环境栈) => 栈内存Stack
      栈内存作用:供代码自上而下执行
      EC(global):全局执行上下文
      VO(global):全局的变量对象(存储定义的变量和值)
    1. 最开始执行的是全局代码,会形成一个全局执行上下文(EC(global)),在堆栈内存中执行全局的代码
    1. 在全局的执行上下文中,有全局的变量对象VO(global),可以把定义的变量和对应的值存储在这里面

  • 基本数据类型(值类型):值类型由于结构相对简单,直接把创建的值存储到"栈内存"中即可,所以栈内存有两个作用:1.供代码执行 2.存储基本类型值
    let a = 12; 任何创建一个变量并赋值的过程,都会经历三个步骤:
    1. 创建一个值12(基本类型值,直接存储在栈内存中即可)
    1. 创建一个变量a,把其存储到VO(global)中
    1. 让创建的变量a和创建的值12关联在一起->=赋值的操作
      let b = a; //当前a的值已经存在,所以只需创建一个变量b,把其存储在VO(global)中,让变量b与变量a的值关联 =》 此时b = 12
      b = 13;//当前变量b已经存在,只需创建一个值13(基本类型值,直接存储在栈内存中),让变量b与创建的值13关联在一起,由于一个变量只能关联一个值,故此时b不在与值12关联,=》 b = 13;

  • 引用数据类型(对象函数):引用数据类型的结构相对复杂(一个综合体,包含很多值),需要单独开辟空间来存储-> "堆内存";引用数据类型值都存储在单独开辟的"堆内存"中!
    堆内存只有一个作用:存储引用数据类型值
    let n = {name : 'xiaoli'};
    1. 创建值:开辟堆内存(heap),每一个堆内存都有一个16进制的地址;把对象中的键值对分别存储到堆内存中;把堆内存的地址放到栈内存中,用来供变量引用
    1. 创建一个变量n
    1. 让变量n和之前的创建堆内存的地址进行关联
      let m = n; //当前n的值已经存在,n指向一个16进制地址,创建变量m,并关联n的值, 此时n与m指向同一个地址
      m.name = 'xiaoxiao'; //m当前指向一个16进制地址找到对应的堆内存,把堆内存中存储的name属性值进行修改,此时n.name也是被改后的'xiaoxiao'
      console.log(n.name);//=》 n与m指向同一个堆内存,上面m修改了堆内存中name属性的值,所以name属性值此时为'xiaoxiao'

相关文章

  • 1.12 堆栈内存和数据类型区别

    解析: 在浏览器中打开页面,浏览器引擎会渲染相关的代码(包含JS代码),换句话说,会把代码自上而下执行 浏览器想要...

  • 前端线路图

    1 堆栈内存以及闭包作用域 1 js中的基本数据类型以及其区别 (8种) 2 js堆栈内存的运行机制 3 变量提升...

  • 简单数据类型和复杂数据类型

    1 - 简单数据类型和复杂数据类型 1.1 简单数据类型 1.2 复杂数据类型 1.3 堆栈 堆栈空间分配区别: ...

  • 数据类型区别和堆栈内存处理

    浏览器能够运行 JS 代码:它会在计算机的内存中分配出一块内存,用来供代码执行的=>栈内存 Stack ECSta...

  • Java基础(一)

    final、finally、finallize的区别;int和Integer的区别;数据类型;数据类型内存。 fi...

  • 浅聊js运行机制

    // 浅聊js的运行机制(堆栈内存和不同的数据类型的操作方式) var a = 12; var b = a; b ...

  • Js/1 堆栈内存/变量提升和闭包

    1# Js数据类型渲染机制和堆栈内存 Js 文件的放置位置 head 头部 body 底部(推荐) Js 的 ...

  • 内存管理面试复习

    内存管理模块 看目录 1. 为何有堆栈,说说堆栈的区别,分别存放什么,为什么要有堆和栈,对象为何放到堆上,有没有栈...

  • js知识版图-数据类型

    一、js中内存分为栈内存、堆内存此处引申知识点:js中堆栈内存及函数处理机制 栈内存 从数据类型角度思考 栈内存 ...

  • C++面试问题汇总

    C++语言本身问题 代码在内存中的分布都有哪些区,宏定义哪个区域?堆栈有什么区别?malloc和new有什么区别?...

网友评论

    本文标题:1.12 堆栈内存和数据类型区别

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