堆栈内存释放

js引擎中内存的分类
  1. 堆内存:堆内存是用来储存数据类型的
  2. 栈内存:栈内存提供js代码执行的环境,并储存引用数据类型的数据的
js中堆栈内存的创建和释放
  1. 创建堆内存

    • 创建一个引用数据类型的值(对象,数组,正则,时间,函数),这时浏览器会为这个引用数据类型创建一个堆内存,在这个堆内存中存储着这些引用数据类型的值.
  2. 堆内存的释放

    • 让所有引用堆内存空间地址的变量赋值为null即可(没有变量占用这个堆内存了,浏览器会在空闲的时候把它释放掉)
  3. 创建栈内存

    • 浏览器打开一个页面的时候,会首先形成一个顶层的栈内存,丫就是全局作用域window
    • 函数执行时产生的私有作用域就是一个供函数代码执行的栈内存
    • 函数每一次执行,都会形成一个全新的栈内存,即每次函数执行都是在一个全新的环境里面执行,所以函数每次执行都是互相独立的.
  4. 栈内存的销毁

    • 顶层栈(全局作用域)销毁,页面关闭,全局作用域销毁
    • 私有作用域销毁:一般情况下,函数执行后栈内存就销毁了,但是有些情况不会销毁
栈内存不销毁的特属情况

1.当函数执行完,如果返回了一个引用数据类型的值,且这个值被外面的属性或者变量接收,此时函数执行的作用域不会被销毁,储存在作用域中的值也不会销毁.
2.函数内部的引用数据类型被外部占用,函数执行的作用域不销毁。

let和const
  1. let和const的特点
    • let和const都是es6新增的关键字,let用来声明变量, const用来声明常量
    • let和const都不会进行变量提升,也就是说,如果在定义之前输出会报错
    • let和const重复声明会报错: Uncaught SyntaxError: Identifier ‘a’ has already been declared( 未捕获的语法错误:标识符’num’已被声明)
    • let和const在全局中声明不会给window增加属性
    • let和const会受到块级作用域的影响,且一定情况下会出现暂时性死区
  2. 暂时性死区(tdz)
    • 在代码块中,用let跟const声明的变量,不能在声明之前使用,这被称为暂时性死区
var num = 2;
{
num=3;
let num =3
}
  • 过去typeof被称为最安全的运算符,因为用它来检测一个尚未声明的变量也不会报错,但是在es6出来之后,因为暂时性死区的原因就不再适用了.
  1. const声明常量的细节问题
    • 1.声明常量时必须赋值,否则报错
      (Uncaught SyntaxError: Missing initializer in const declaration
      未能捕获的语法错误:用const声明时初始值缺失)
    • 2.常量一旦声明就无法改变,但如果声明的是一个引用数据类型,因为常量代表的是这个引用数据类型的空间地址,所以我们可以随意改变地址中的数据.但是不能修改常量存储的空间地址
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值