es6函数的扩展

函数的扩展

参数默认值:为函数参数指定默认值

  • 形式: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)
  • 将具名函数赋值给变量:函数名(ES5ES6)
  • bind返回的函数:bound 函数名(ES5ES6)
  • Function构造函数返回的函数实例:anonymous(ES5ES6)

箭头函数(=>):函数简写

  • 无参数:() => {}
  • 单个参数:x => {}
  • 多个参数:(x, y) => {}
  • 解构参数:({x, y}) => {}
  • 嵌套使用:部署管道机制
  • this指向固定化
    • 并非因为内部有绑定this的机制,而是根本没有自己的this,导致内部的this就是外层代码块的this
    • 因为没有this,因此不能用作构造函数

尾调用优化:只保留内层函数的调用帧

  • 尾调用
    • 定义:某个函数的最后一步是调用另一个函数
    • 形式:function f(x) { return g(x); }
  • 尾递归
    • 定义:函数尾调用自身
    • 作用:只要使用尾递归就不会发生栈溢出,相对节省内存
    • 实现:把所有用到的内部变量改写成函数的参数并使用参数默认值

 

2017新增

函数参数尾逗号:允许函数最后一个参数有尾逗号

 

2019新增

  • toString()改造:返回函数原始代码(与编码一致)
  •  catch()参数可省略:catch()中的参数可省略
posted @ 2019-10-10 14:34  HandsomeGuy  阅读(204)  评论(0编辑  收藏  举报