闭包:高阶函数的一种方式
所谓的闭包,即是一段封闭的函数块,可以简单理解一段与全局变量不相关的封闭函数,其内部变量的值如果没有被重新调用就不会因外部重新赋值而被改变,在ES6没有或者说像let const这类命名语还没有普及之前,我们使用var来命名变量,var命名的是在全局范围内的,所以该作用域会被提升到函数体外,进而其他地方对该变量有所更改则会影响到函数体内部的变量变化
定义一个a方法,在a方法中定义一个b方法,并且b方法里面用到了a方法里面定义的变量那么此时就形成了闭包函数
在ES6推出let const 后我们可以使用let 或const 解决,let 是块级定义域,其变量只在一个域里发生变化,即在函数中定义let 后,函数外部改变let 变量的值时将会报错。const是定义一个常量的值,即定义一个变量后,即使你在同一域级里重新对这个变量赋值也是不被允许的。
解构赋值:将对象的属性名和属性值分离
const a1 = {
name:'李华',
sex:'男',
hair:'green'
} //定义一个名字叫李华的对象
let { name,sex} = a1 //解构赋值,把key:name和sex 从a1上取出
继承:使子对象可以使用父级对象的属性和方法,同时又可以有自己的属性和方法,避免重复定义/使用的代码块大量重复情况:
在ES5中,我们使用【call】来继承,call后面的括号里填入父级对象的变量后可以选填新增的变量,一般推荐前面使用this,方便调用。(PS:保护环境,从我做起,因为我实在是想不到其他内容了)
在ES6里,我们使用extends,=>
extends里第一个函数是自定义的constructor函数,用来继承父级属性和方法,该函数第一条代码需要添加super()方法,括号里填父级属性名(可变更的属性名)(super!超人天上飞,所以放最前面)
推荐使用后者,不需要再考虑this的指向问题!(yes,好文明!)