ES6的函数部分总结

函数扩展

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

  1. 形式:
function Fun(x = 1, y = 2) {}
  1. 参数赋值:惰性求值(函数调用后才求值)
  2. 参数位置:尾参数
  3. 参数作用域:函数作用域
  4. 声明方式:默认声明,不能用constlet再次声明
  5. length:返回没有指定默认值的参数个数
  6. 与解构赋值默认值结合
function Func({ x = 1, y = 2 } = {}) {}

rest/spread参数(…):返回函数多余参数

  1. 形式:以数组的形式存在,之后不能再有其他参数
  2. 作用:代替Arguments对象
  3. length:返回没有指定默认值的参数个数但不包括rest/spread参数

补充
剩余参数与arguments的区别:
arguments是一个伪数组
剩余参数是一个真正的数组,可以调用数组的方法
arguments上有callee 方法,作用:只想当前执行的函数。

严格模式:在严格条件下运行JS
应用:只要函数参数使用默认值、解构赋值、扩展运算符,那么函数内部就不能显式设定为严格模式

name属性:返回函数的函数名

  1. 将匿名函数赋值给变量:空字符串(ES5)、变量名(ES6)
  2. 将具名函数赋值给变量:函数名(ES5和ES6)
  3. bind返回的函数:bound 函数名(ES5和ES6)
  4. Function构造函数返回的函数实例:anonymous(ES5和ES6)

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

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

箭头函数误区

函数体内的this是定义时所在的对象而不是使用时所在的对象
可让this指向固定化,这种特性很有利于封装回调函数
不可当作构造函数,因此箭头函数不可使用new命令
不可使用yield命令,因此箭头函数不能用作Generator函数
不可使用Arguments对象,此对象在函数体内不存在(可用rest/spread参数代替)
返回对象时必须在对象外面加上括号

尾调用优化:只保留内层函数的调用帧
目前只有 Safari 浏览器支持尾调用优化,Chrome 和 Firefox 都不支持。

  1. 尾调用
    定义:某个函数的最后一步是调用另一个函数
    形式:function f(x) { return g(x); }
  2. 尾递归
    定义:函数尾调用自身
    作用:只要使用尾递归就不会发生栈溢出,相对节省内存
    实现:把所有用到的内部变量改写成函数的参数并使用参数默认值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值