es6 函数优化

es6 函数改变

  • 可以为函数定义默认参数,在es6之前,可能需要在函数体内添加额外的代码来检查参数是否存在,如若不存在,则需要手动赋一个默认值。
  • 也可以为函数定义不定参数,这个数组中包含其后所有的参数,由于使用的是真实数组,且可以根据需要决定要囊括到数组中的参数,因此不定参数是一个比arguments对象更灵活的解决方案。
  • 展开运算符与不定参数形似,可以通过它解构数组,并将每一个元素作为函数的第一参数使用。在es6之前,要手动指定每一个参数或使用apply()方法
  • 函数中新增的name 属性。es6也定义了块级函数的行为,即使在严格模式下块级函数也不再是一个语法错误
  • es6中,普通的函数会触发函数的[[call]]方法调用,通过new关键字调用函数会触发函数的[[constructor]]方法调用。新增的元素属性new.target可以帮助你检测函数是通过何种方式调用的
  • es6在函数方面最大的改变是添加了箭头函数。箭头函数的设计目标是替代匿名函数表达式,它的语法更简洁,具有词法级的this绑定,没有arguments对象,函数内部的this值不可改变,因此不能作为构造函数
  • 尾调用指的是函数作为另一个函数的最后一条语句被调用。尾调用优化可以帮助函数保持一个更小的调用栈,从而减小内存的使用,避免栈溢出错误。当程序满足优化条件时,引擎会自动对其优化。当然,你可能希望重写递归函数,从而使引擎更好地优化你的程序.

尾调用优化的条件:
1. 尾调用不访问当前栈的变量(也就是函数不是一个闭包)
2. 在函数内部,尾调用是最后一条语句。
3. 尾调用的结果作为函数值返回。

function doSomething(){
    return doSomethingElse(); //尾调用
}
function doSomething(){
    doSomethingElse();//无法优化,无返回
}
function doSomething(){
    return 1 + doSomethingElse();//无法优化,必须在返回值后不添加其他操作
}
function doSomething(){
    var result = doSomethingElse();
    return result;//无法优化,调用不在尾部
}
function doSomething(){
   var num = 1,
       func = () => num;
       //无法优化,该函数是一个闭包
    return func();
}
//一般用在递归里面
function factorial(n){
  if (n <= 1){
    return 1;
  } else {
    //无法优化,必须在返回后执行乘法操作
    return n * factorial(n - 1);    
  }
}
//一般用在递归里面
function factorial(n, p = 1){
  if (n <= 1){
    return 1 * p;
  } else {
    //可以优化
    let result = n * p;
    return factorial(n - 1, result);
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值