闭包
=> 函数的高级应用
=> 回顾函数
function fun(){
console.log("内容")
}
let fun = function(){
console.log("内容")
}
fun()
let fun = new Function('console.log("内容")')
补充函数内存结构
函数销毁的执行空间
函数不被销毁的执行空间
闭包是javascript语法现象,是函数的高级用法
闭包形成条件:
1. 函数嵌套- 外层函数 内层函数
2. 外部引用返回的内层函数
3. 内层使用外层函数变量
闭包作用:
1. 形成不被销毁的执行空间,延长变量生命周期, 缺点,容易引起内存泄露
2. 外部可以访问内部函数的变量- 变量作用域扩展 - 没有形成闭包,只能内部函数访问外层函数变量
3. 形成块作用域定义私有变量
柯里化函数
将有多个形参的函数转换成多个只有一个形参的函数
通用柯里化函数
1. 定义可以变长度形参函数
function fn(...args){
console.log(args) // [1,2,3]
}
fn(1,2,3)
2. 定义一个函数,参数也是函数,参数函数它参数个数
function fn(func){
console.log(fn.length)
}
继承
面向对象
- 面向对象编程思想
找对象,解决问题,如果对象不存在,封装对象
- 构造函数
- ES6 class类
面向对象三大特性之一 继承
1. 封装 对象属性和方法
2. 继承
3. 多态 一个事物有多种表现形态
let num = 100 // number
num = '100' // string
继承
=>子类继承父类,子类就拥有父的属性和方法
=>表示类与类之间的关系, 父类和子类关系
现实生活中的继承
儿子继承父亲money、home、car
ES5 实现继承
1. 构造函数继承
在子类构造函数中调用父类构造函数
2. 拷贝继承-实现原型属性和方法继承
class 类继承
继承: 类与类之间的关系,
子类继承父类
语法:
// 父类
class Parent{
constructor(){
this.money = 10000
}
playGame(){
}
}
// 子类Son继承父类Parent
class Son extends Parent{
constructor(){
// 先要实例父类再有子类实例
super() // 调用父类构造器实例化父类
this.name = 'jack'
}
}
let parent1 = new Parent()
let s1 = new Son()