闭包
概念:
由于作用域嵌套,导致执行空间不销毁的场景
通常的表现形式:
大函数中返回小函数
小函数使用大函数中的变量
全局变量跟局部的小函数保持引用关系
好处:
保护了变量的私有性
延长了变量的生命周期
间接让全局可以操作局部变量
缺点:
滥用闭包容易造成内存泄漏/溢出
使用场景:
1.循环中执行异步代码/绑定事件
2.防抖:
触发很多次事件 ,我们只要他执行最后一次
3.节流:
触发很多次事件,让触发次数不要那么频繁
4.函数柯里化:
拆分形参: function(a,b){ }
function(a) { return function(b){} }
继承
概念:
让一个对象能拥有另一个对象的属性和方法
实现方式:
1.原型继承: 将子对象的原型改成父对象
2.借用继承: 在子构造函数中通过借用函数执行父构造函数
3.混合继承: 原型继承+借用继承
4.es6的继承: class子类 extends父类{}
注意:
子类中有constructor,在constructor里面的最前面必须调用super()
调用super就相当于在调用父类的constructor
es6的类:
es6提供了关键字class
定义类
类:抽象的对象
作用:为了定义对象 - 将它当做构造函数来使用
语法: class类名{} 构造函数的马甲
添加属性的两种方式:
1.直接在大括号中的最顶部书写 - 属性名=值
2.固定语法 - constructor() { this.属性名 = 值 }
添加方法:
就像constructor定义函数即可