JS堆栈处理

堆栈操作

相关名词

  1. JS 执行平台:
    1. 不同浏览器
    2. Nodejs
    3. webview
    4. 不论是哪一种平台都需要具备代码执行的环境
  2. 执行环境
    1. 不论何种语言编写的代码,最终执行都是发生在内存中
    2. JS代码执行时会生成一个栈空间,它的本质也是内存空间
    3. 每当浏览器加载界面时就会从计算机内存中申请一片空间,称之为执行环境栈
    4. ESC(execution stack context)
  3. 执行上下文
    1. 一个 JS 文件会包含多行代码,不同行代码组合在一起就是代码块
    2. 多个代码块中的代码直接放入栈中运行,必须会出现互相干扰语法冲突
    3. 每个代码块都有自己的执行上下文,在上下文中保存了当前段代码执行时所需要数据
    4. 执行上下文使用 EC(execution context) 表示
  4. 进栈执行
    1. 执行环境栈是一个先进后出的栈结构
    2. 代码运行时会产生不同的执行上下文
    3. 不同上下文进栈执行,执行代码,最终决定是否出栈
  5. EC(G)
    1. execution context global,全局执行上下文,浏览器加载界面时默认创建
  6. VO(G)
    1. variable object,全局变量对象,用于存放全局上下文当中声明定义的变量
  7. GO
    1. global object,全局对象,它和 VO 并不是一个东西,在浏览器平台下我们可以认为是 window
    2. 做为一个对象,它同样占据空间,浏览器加载界面时就会创建,在它内部保存了许多 JS 可以直接调用的内容
    3. 例如 setInterval setTimeout JSON
    4. 为了方便使用上述的 API, 在 VO(G) 当中就创建了一个 window 属性指向当前的空间
  8. 声明:采用具体的关键字声明一个变量 var let const function var name
  9. 定义:定义就是给某一个变量执行赋值 name = 'kobe'

基本类型堆栈处理

在这里插入图片描述

  • 基本数据类型是按值进行操作

  • 基本数据类型值是存放在 栈区的

  • 无论我们当前看到的栈内存,还是后续引用数据类型会使用的堆内存都属于计算机内存

  • GO(全局对象)

引用类型堆栈处理

在这里插入图片描述

函数堆栈处理

请添加图片描述

  • 函数创建

    • 可以将函数名称看做是变量,存放在 VO 当中 ,同时它的值就是当前函数对应的内存地址
    • 函数本身也是一个对象,创建时会有一个内存地址,空间内存放的就是函数体代码(字符串形式的)
  • 函数执行

    • 函数执行时会形成一个全新私有上下文,它里面有一个AO 用于管理这个上下文当中的变量
  • 步骤:

  1. 作用域链 <当前执行上下文, 上级作用域所在的执行上下文>
  2. 确定 this
  3. 初始化 arguments (对象)
  4. 形参赋值:它就相当于是变量声明,然后将声明的变量放置于 AO
  5. 变量提升
  6. 代码执行

闭包堆栈处理

请添加图片描述

  • 闭包: 是一种机制:

    • 保护:当前上下文当中的变量与其它的上下文中变量互不干扰
    • 保存:当前上下文中的数据(堆内存)被当前上下文以外的上下文中的变量所引用,这个数据就保存下来了
  • 函数调用形成了一个全新的私有上下文,在函数调用之后当前上下文不被释放就是闭包(临时不被释放)

闭包与垃圾回收

请添加图片描述

循环添加事件

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值