JS环境中分配的内存,一般有如下生命周期
内存泄漏:程序中分配的内存由于某种原因程序未释放或无法释放叫做内存泄漏
下面介绍两种常见的浏览器垃圾回收算法:引用计数去和 标记清除法
现代的浏览器已经不再使用引用计数算法了
现代浏览器通用的大多是基于标记清除算法的某些改进算法,总体思想都是一致的。
先看个简单的代码:
function fn() {
var num = 10;
function fun() {
console.log(num);
}
fun();
}
fn();
闭包 = 内层函数 +外层函数的变量
封闭数据,实现数据私有,外部也可以访问函数内部的变量闭包很有用,因为它允许将函数与其所操作的某些数据 (环境)关联起来
内存泄漏
目标:了解什么是变量提升
变量提升是javaScript 中比较“奇怪”的现象它允许在变量声明之前即被访问 (仅存在于var声明变量)注意:
1.变量在未声明即被访问时会报语法错误
2.变量在var声明之前即被访问,变量的值为 undefined
3let/const声明的变量不存在变量提升
4.变量提升出现在相同作用域当中
5.实际开发中推荐先声明再访问变量
1.用哪个关键字声明变量会有变量提升?
var
2.变量提升是什么流程?
先把var变量提升到当前作用域于最前面只提升变量声明,不提升变量赋值然后依次执行代码我们不建议使用var声明变量
目标:能说出函数提升的过程
函数提升与变量提升比较类似,是指函数在声明之前即可被调用
知道函数参数默认值、动态参数、剩余参数的使用细节,提升函数应用的灵活度,知道箭头函数的语法及与普通函数的差异
函数参数的使用细节,能够提升函数应用的灵活度
学习路径
1.动态参数
arguments 是函数内部内置的伪数组变量,它包含了调用函数时传入的所有实参
1.当不确定传递多少个实参的时候,我们怎么办?
arguments 动态参数
2.arguments是什么?
1…是语法符号,置于最末函数形参之前,用于获取多余的实参
2.借助 …获取的剩余实参,是个真数组
开发中,提倡使用多使用:剩余参数
目标:能够使用展开运算符并说出常用的使用场景展开运算符(…),将一个数组进行展开
目标:能够熟悉箭头函数不同写法
目的:引入箭头函数的目的是更简短的函数写法并且不绑定this,箭头函数的语法比函数表达式更简洁
使用场景:箭头函数更适用于那些本来需要匿名函数的地方
学习路径:
1.箭头函数属于表达式函数,因此不存在函数提升
2.箭头函数只有一个参数时可以省略圆括号 ()
3.箭头函数函数体只有一行代码时可以省略花括号#,并自动做为返回值被返回
4加括号的函数体返回对象字面量表达式
普通函数有arguments 动态参数
箭头函数没有 arguments 动态参数,但是有 剩余参数 …args
在箭头函数出现之前,每一个新函数根据它是被如何调用的来定义这个函数的this值,非常令人讨厌箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this。
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this.
1.箭头函数里面有this吗?
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this
2.DOM事件回调函数推荐使用箭头函数吗?
不太推荐,特别是需要用到this的时候
事件回调函数使用箭头函数时,this 为全局的 window
数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法
基本语法:
1.赋值运算符 =左侧的用于批量声明变量,右侧数组的单元值将被赋值给左侧的变量2.变量的顺序对应数组单元值的位置依次进行赋值操作
目标:知道解构的语法及分类,使用解构简洁语法快速为变量赋值
数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法
基本语法:典型应用交互2个变量
注意: js 前面必须加分号情况
1.立即执行函数
2.数组解构