2021-12-03 闭包 解构赋值 继承

闭包:高阶函数的一种方式

所谓的闭包,即是一段封闭的函数块,可以简单理解一段与全局变量不相关的封闭函数,其内部变量的值如果没有被重新调用就不会因外部重新赋值而被改变,在ES6没有或者说像let const这类命名语还没有普及之前,我们使用var来命名变量,var命名的是在全局范围内的,即

非闭包函数的问题

上面这里想要获取一个计数a的值,但是由于var定义的a是作用于全局的,底部改变后,得到的结果也会改变

解决方法就是用闭包


闭包函数解决全局变量问题

以上方法中,函数addin返回的是另一个函数addto,而且函数addto里面套用了函数addin的变量a的值,所以当这个立即执行函数add被调用时,a的值被保存在函数addto代码块中,由于返回值是函数,所以在调用函数add时,直接走函数addto,所以就避免了a被重赋值后可能会出现数值没达预期的情况。

以上函数返回函数的情况就是一个闭包,它使全局变量在函数中变为了函数的局部变量,变量a的域发生了改变,解决了全局变量a的赋值问题,

在ES6退出let const 后我们可以使用let 或const 解决,let 是块级定义域,其变量只在一个域里发生变化,即在函数中定义let 后,函数外部改变let 变量的值时将会报错。const是定义一个常量的值,即定义一个变量后,即使你在同一域级里重新对这个变量赋值也是不被允许的。



解构赋值:将对象的属性名和属性值分离


数组的解构赋值

上式中,a,b,c,d即arr1[0],arr[1],arr[2],arr[3],同理:


对象的解构赋值(火红的萨日朗!)

即,把对象(数组)的名和值分离,更加灵活的使用。



继承:使子对象可以使用父级对象的属性和方法,同时又可以有自己的属性和方法,避免重复定义/使用的代码块大量重复情况!


call方法继承

在ES5中,我们使用【call】来继承,call后面的括号里填入父级对象的变量后可以选填新增的变量,一般推荐前面使用this,方便调用。(PS:保护环境,从我做起,因为我实在是想不到其他内容了)

在ES6里,我们使用extends,=>


extends方法继承

extends里第一个函数是自定义的constructor函数,用来继承父级属性和方法,该函数第一条代码需要添加super()方法,括号里填父级属性名(可变更的属性名)(super!超人天上飞,所以放最前面)

推荐使用后者,不需要再考虑this的指向问题!(yes,好文明!)

你可能感兴趣的:(2021-12-03 闭包 解构赋值 继承)