从堆栈视角看函数执行

100 阅读1分钟

概览

  • js 使用堆 + 栈的数据结构管理函数的执行

  • 所有的引用数据,都保存到堆内存

  • 函数声明时,会做以下事情:

    • 创建一个堆内存

    • 确定作用域(在哪个执行上下文创建,作用域就是哪个执行上下文)

    • 确定 this

  • 函数执行时,需要:

    • 创建一个函数执行上下文,将其压入执行栈

    • 确定执行上下文的作用域链(第一个永远是本执行上下文,第二个则是函数声明时的作用域)

    • 列出所有变量 value

    • 确定 this

  • 作用域 !== 作用域链

    • js 使用静态作用域,也就是说在函数创建,函数的作用域就已经确定

    • 两者保存的都是执行上下文

    • 函数 - 作用域

    • 执行上下文 - 作用域链