了解闭包
-
变量的作用域
变量作用域分为两种:全局变量和局部变量
- 函数内部可以使用全局变量
- 函数外部不可以使用局部变量
- 当函数执行完毕,本作用域的局部变量会销毁
-
什么是闭包
闭包就是指有权访问另一个函数作用域中变量的函数。
简单理解就是一个作用域可以访问另外一个函数内部的局部变量
在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
例题
函数一执行,会形成一个全新独立的私有作用域。
当前函数执行,形成一个私有作用域a,a的上级作用域是谁,和他在哪执行的没有关系,和他在哪创建(定义)的有关系,在哪创建,他的上级作用域就是谁
-
堆内存和栈内存的释放
堆内存:存储引用数据类型值(对象:键值对;函数:代码字符串)
栈内存:提供JS代码执行的环境和存储基本数据类型
堆内存释放
让所有引用堆内存空间地址的变量赋值为null即可(没有变量占用这个堆内存了浏览器会在空闲的时候把它释放掉)
栈内存释放
一般情况下,当函数执行完成,所形成的私有作用域(栈内存)都会自动释放掉(在栈内存中存储的值也会释放掉),但也有特殊情况:
- 函数执行完成,当前形成的栈内存中,某些内容被栈内存以外的变量占用了,此时不能释放(一旦释放,外面找不到原有的内容了)
- 全局栈内存只有在页面关闭的时候才会被释放掉
- 如果当前栈内存没有被释放,那么之前栈内存中存储的基本值也不会被释放
例题
-
闭包的作用
- 保护作用:形成私有变量不受外界的干扰
- 保存作用:形成不销毁的栈内存,把一些值保存下来方便后面的调用。
中国加油! 武汉加油!千峰加油! 自己加油!