函数底层运行机制

108 阅读1分钟

栈内存「EC Stack」

  • 存储原始值类型的值

  • 提供代码执行的环境

堆内存 「Heap」

  • 存储对象类型的值

EC 执行上下文 : 区分代码的执行环境

常见的上下文环境

  • 全局上下文EC(G)

  • 函数私有上下文 EC(?)

  • 块级私有上下文 EC(BLOCK)

产生私有上下文环境 => 进栈执行 => 出栈释放

变量对象 : 用来存储声明的变量的地方

  • VO

  • AO

GO 全局对象

  • window指的就是全局对象GO

  • 全局上下文中,基于var和function声明的变量是存储到Go中的,基于let、const声明的变量才是存储到VO中的

let ? = ? 的操作过程

创建值

  • 原始值类型:直接存储到栈内存中,按值操作

  • 对象类型: 按照堆内存地址来操作

    • 对象 : 开辟一个堆内存空间,一次存储对象的键值对、吧空间地址赋值给变量

    • 函数:内存空间存储三部分信息

      • 作用域[scope]:当前所属的上下文

      • 函数体中的代码,当作字符串存储

      • 把函数当作普通对象存储一些静态属性和方法「name & length」

声明变量

变量和值相关联

例题

image.png

声明过程草图

image.png

所以fn(x)执行首先改0x001中的值,然后y重新赋新的地址值0x003,里面只有一项100,然后添加一项,值为200,所以答案为[100,200],[100,23]