JS进阶(二)JS底层运行机制之堆栈内存

简介: 1.JS底层运行机制之堆(Heap)栈(Stack)内存相关理论知识ECStack(Execution context Stack) 执行环境栈: —— 内存中分出来用于执行js代码的空间EC(Execution context): —— 执行上下文, 为了区分全局和函数执行所处的不同范围(词法作用域),又可以分为全局执行上下文EC(G)和函数执行私有上下文EC(FUNC)作者:重阳微噪链接:https://juejin.cn/post/6850418109707190285来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1.JS底层运行机制之堆(Heap)栈(Stack)内存

相关理论知识

  • ECStack(Execution context Stack) 执行环境栈: —— 内存中分出来用于执行js代码的空间
  • EC(Execution context): —— 执行上下文, 为了区分全局和函数执行所处的不同范围(词法作用域),又可以分为全局执行上下文EC(G)函数执行私有上下文EC(FUNC)
  • VO(Varilbale Object)和AO(Active Object):  —— 在每一个上下文代码执行的时候,都可能会创建变量 , 全局变量对象VO(Varilbale Object) 和 私有变量对象AO (Active Object)
  • GO(global object):  内置、全局对象,——浏览器把所有供后期需要供JS调取使用的属性和方法都放在GO对象中,如setInterval、eval、JSON并且创建一个window对象指向它,使用的时候可以省略window,如window.console.log=> console.log1733cb1822be28d7_tplv-t2oaga2asx-zoom-in-crop-mark_4536_0_0_0.png
    let a = 12;
    let b = 13;
    function func(){
       let a = 1;
       let b = 3;
    }
    console.log( a,b )   // 12 ,13
    // 由上图我们可以得知函数中的a、b变量存到了AO(FUNC)中,函数外的a、b存到了VO中,所以函数取到的应该是VO中的12,13

代码执行阶段

  • 创建变量并赋值的过程【3步】 1、先创建值 基本类型的值直接存储到栈内存中 引用数据类型需要开辟一个堆内存, 把堆内存地址存放到栈中供变量调用 2、创建变量,存储在变量对象中 3、关联,让变量和值进行关联(指针指向的过程)
  • 对象中属性名的类型 【说法一,属性名类型只能是字符串或者Symbol】 【说法二,属性名类型可以是任何基本类型值,处理中可以和字符串互通】 但是属性名绝对不能是引用数据类型,如果设置为引用数据类型,最后也是转换为字符串来处理的, 属性名应该是一个值
  for(let key in obj){}  
  // For In 遍历中获取的属性名都会变成字符串,并且不会迭代   到属性为Symbol类型的属性
  var a ={} , b ="0" , c =0;
  a[b] = "蓝天"
  a[c] ="白云"
  console.log(a[b])  // 白云
  var a ={} ,
        b = Symbol("1") ,
        c =Symbol("1") ;
  a[b] = "蓝天"
  a[c] ="白云"
  console.log(a[b])  // 蓝天
  var a ={} ,
        b = { n:'1' } ,
        c = { m:'2' } ;
  a[b] = "蓝天"
  a[c] ="白云"
  // a['[object Object]']
  console.log(a[b])  // 白云
  //  连等赋值
  let a = 12,
       b = 13;
       => let a =12; let b =12;
  let a = b = 12; 
   // 默认从右到左
   // 1、创建一个值12
   //  2、b = 12;
   //  3、let  a = 12;
   [mdn 运算符优先级](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
  a.x  = a  ={};
  a = a.x = {};
  因为a.x的优先级是很大的,不管怎么调换位置,都是先处理a.x = {}
  var a = {
    n : 1
  }
  var b = a;
   a.x = a = {
      n : 2
  }
  console.log(a.x)  // undefined
  console.log(b)    // { n:1 , x: {n:2} }
  // 解析: 1、先创建值: 引用类型,开辟堆空间存{n:1}, 引用为16进制的地址如AAFFCC

思考题

var x = [12,23];
function fn(y) {
   y[0] = 100;
   y = [100];
   y[1] = 200;
   console.log(y)
}
fn(x);
console.log(x)

写在最后

欢迎访问我的博客rockshang.com

相关文章
|
9月前
|
缓存 固态存储 Windows
如何让内存发挥到最大效能?全面优化指南,提升电脑运行体验
电脑内存使用不合理会导致卡顿,本文教你如何优化内存性能。检查内存容量与主板支持上限,考虑升级或调整配置;关闭后台程序、管理浏览器标签、结束异常进程以释放内存;设置虚拟内存、调整视觉效果、定期重启提升效率;必要时增加内存条、选择高频内存、更换固态硬盘。避免盲目清理内存和依赖大内存忽视其他硬件瓶颈。只需合理设置,无需额外花钱,就能显著提升电脑速度。
|
8月前
|
编解码 Ubuntu Linux
ubuntu系统安装指南:免费且适合老旧电脑,4GB内存也能流畅运行!
点击启动台,找到并点击设置。在设置中,选择语言和区域,再点击管理语言。安装所需的语言包,输入密码进行确认。等待大约2分钟,语言包安装完成后,点击安装语言,选择中文选项。这里有简体和繁体两种选择,根据个人需求进行选择。再次等待2分钟,安装完成后,点击这里,选择中文并应用。然后,将出现的中文拖动到最上面,应用更改并退出设置。最后,重启虚拟机,再次进入系统时,你会发现界面已经变成了中文,而且系统依然保持流畅。Ubuntu系统不仅外观漂亮、干净,而且性能稳定、安全可靠。如果你的电脑内存只有4GB,或者你对Windows系统感到厌倦,那么Ubuntu绝对是一个值得尝试的选择。它不仅办公打印一应俱全,还拥
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
708 158
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
701 174
|
监控 JavaScript 数据库连接
解读Node.js内存监控工具生成的报告
需要注意的是,不同的内存监控工具可能会有不同的报告格式和内容,具体的解读方法可能会有所差异。因此,在使用具体工具时,还需要参考其相关的文档和说明,以更好地理解和利用报告中的信息。通过深入解读内存监控报告,我们可以不断优化 Node.js 应用的内存使用,提高其性能和稳定性。
620 175
|
监控 JavaScript
选择适合自己的Node.js内存监控工具
选择合适的内存监控工具是优化 Node.js 应用内存使用的重要一步,它可以帮助你更好地了解内存状况,及时发现问题并采取措施,提高应用的性能和稳定性。
766 174
|
缓存 监控 JavaScript
避免在Node.js中出现内存泄漏
总之,避免内存泄漏需要在开发过程中保持谨慎和细心,遵循最佳实践,不断优化和改进代码。同时,定期进行内存管理的检查和维护也是非常重要的。通过采取这些措施,可以有效地降低 Node.js 应用中出现内存泄漏的风险,确保应用的稳定和性能。
424 159
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
1051 159
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
740 62
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
下一篇
开通oss服务