函数的扩展
参数默认值:为函数参数指定默认值
- 形式:function Func(x = 1, y = 2) {}
- 参数赋值:惰性求值(函数调用后才求值)
- 参数位置:尾参数
- 参数作用域:函数作用域
- 声明方式:默认声明,不能用const或let再次声明
- length:返回没有指定默认值的参数个数
- 与解构赋值默认值结合:function Func({ x = 1, y = 2 } = {}) {}
- 应用
- 指定某个参数不得省略,省略即抛出错误:function Func(x = throwMissing()) {}
- 将参数默认值设为undefined,表明此参数可省略:Func(undefined, 1)
rest/spread参数(...):返回函数多余参数
- 形式:以数组的形式存在,之后不能再有其他参数
- 作用:代替Arguments对象
- length:返回没有指定默认值的参数个数但不包括rest/spread参数
严格模式:在严格条件下运行JS
- 应用:只要函数参数使用默认值、解构赋值、扩展运算符,那么函数内部就不能显式设定为严格模式
name属性:返回函数的函数名
- 将匿名函数赋值给变量:空字符串(ES5)、变量名(ES6)
- 将具名函数赋值给变量:函数名(ES5和ES6)
- bind返回的函数:bound 函数名(ES5和ES6)
- Function构造函数返回的函数实例:anonymous(ES5和ES6)
箭头函数(=>):函数简写
- 无参数:() => {}
- 单个参数:x => {}
- 多个参数:(x, y) => {}
- 解构参数:({x, y}) => {}
- 嵌套使用:部署管道机制
- this指向固定化
- 并非因为内部有绑定this的机制,而是根本没有自己的this,导致内部的this就是外层代码块的this
- 因为没有this,因此不能用作构造函数
尾调用优化:只保留内层函数的调用帧
- 尾调用
- 定义:某个函数的最后一步是调用另一个函数
- 形式:function f(x) { return g(x); }
- 尾递归
- 定义:函数尾调用自身
- 作用:只要使用尾递归就不会发生栈溢出,相对节省内存
- 实现:把所有用到的内部变量改写成函数的参数并使用参数默认值
2017新增
函数参数尾逗号:允许函数最后一个参数有尾逗号
2019新增
- toString()改造:返回函数原始代码(与编码一致)
- catch()参数可省略:catch()中的参数可省略
es6函数的扩展
原文:https://www.cnblogs.com/lijinxiao/p/11647784.html