2.js堆栈内存处理机制

100 阅读1分钟

js执行环境

  • 浏览器「浏览器内核 -> JS渲染引擎」
  • Hybrid混合APP「webview基于webkit内核」
  • Node

过程

  • 执行环境栈 ECStack「Execution Context Stack」:浏览器再计算机内存中,开辟执行JS代码的栈内存
  • 全局执行上下文 EC(G) -> Execution Context(Global):区分不同区域代码执行
  • 全局变量对象VO(G) -> Varibale Object(Global):存储全局上下文中的声明
  • 进栈出栈:当前区域的执行上下文形成进栈,执行完成出栈
  • 词法分析,变量提升(暂略)
  • 代码执行:
    • 赋值过程:
      • 1.创建值
        • 基本类型值,直接存栈内存,
        • 引用类型,开辟新的堆内存Heap,
          • 每个堆有16进制地址
          • 把键值对分别存储到堆中
          • 16进制地址放到栈内存中存储,方便后期变量关联
      • 2.声明变量 declare
      • 3.变量和值关联到一起

内存区别:性能优化 -> 内存优化:

  • 栈内存:代码执行 & 存储基本类型值
  • 堆内存:存储引用数据类型

连等赋值运算

var a = { n: 1 }
var b = a
a.x = a = { n: 2 }
console.log(a.x)
console.log(b)

/*
var a = { n: 1 }
var b = a
a.x = a = { n: 2 }
console.log(a.x)
console.log(b)

/*
  undefined

  {
    n: 1
    x: {n: 2}
  }
*/
*/