从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS)
复习:从零开始学前端:作用域、执行顺序 — 今天你学习了吗?(JS:Day10)
文章目录
- 从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS)
- 第十一节课:垃圾回收机制,闭包,案例
- 一、垃圾回收机制
- 二、变量声明周期
- 三、闭包案例
- 四、闭包优缺点
- 五、代码回收规则
第十一节课:垃圾回收机制,闭包,案例
一、垃圾回收机制
JS的内存回收机制
:一个函数在开始执行的时候,会给其中定义的变量划分内存空间保存,以备后面的语句所用,等到函数执行完毕返回了,函数内部的变量就被认为是无用的了,对应的空间也就被回收了。下次再执行此函数的时候,所有的变量又回到了最初的状态,重新赋值使用。
二、变量声明周期
变量声明周期
:当一个变量的生命周期结束之后它所指向的内存就应该被释放。JS有两种变量,全局变量和在函数中产生的局部变量。局部变量的生命周期在函数执行过后九结束了,此时便可将它应用的内存释放(即垃圾回收),但全局变量声明周期会持续到浏览器关闭页面。
三、闭包案例
何为闭包?
:就是函数可以访问其声明时所在作用域内的变量,根据这个特性可以在函数内返回一个函数,通过这个被返回的函数可以在函数外部访问函数内的变量;
形成闭包的条件?
:1.函数嵌套函数(有作用域的嵌套);2.内部函数使用了外部函数的变量/参数;
闭包的作用是什么?
:内部函数使用了外部函数的变量或参数会被永久的保存下来。
案例:
function fn() {
var a = 1;
return function () {
console.log(++a)
}
}
var fn2 = fn();
fn2();//2
fn2();//3
fn2();//4
var fn3 = fn();//如果说开辟了一个新的空间,那么将被重新地赋值;
fn3();//2
输出:
四、闭包优缺点
闭包优点
:
- 使用的变量会被存储不会被回收(在关闭程序释放),我们可以对同一个变量连续性进行多次操作;
- 避免全局变量被污染
闭包的缺点
:
- 不关闭页面的时候,闭包会一直占用内存空间
- 无法回收变量,导致内存无法得到释放/内存泄漏(是指程序中已动态分配的堆内存由于某种原因未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至熊崩溃等严重后果)
五、代码回收规则
- 全局变量不会被回收。(函数除外)
- 局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁
- 只要被另外一个作用域所引用就不会被回收
预习:从零开始学前端:字符串、数组的方法 — 今天你学习了吗?(JS:Day12)