es6函数

1.默认参数

  默认参数导致函数在执行时,先执行参数体,再执行函数体

2.箭头函数

无法使用arguments,可通过获取剩余参数的语法代替
不能做构造函数
作用域是定义时的作用域,箭头函数不受严格模式影响,如果要修改其作用域,将其放到普通函数里
箭头函数不能做generator,内部不能使用yeild关键字
let demo = (...args) => {
     console.log(args)
}

3.尾调

定义:在一个函数里面返回另一个函数结果

运行子函数时,没有任何与父函数产生联系的数据(会删除父函数),所以可以尾调函数优化

闭包不能是尾调
// 子函数
function ickt(){
      console.log('ickt')
}
 // 函数
function demo(){
      return ickt()
}

4.尾递归和蹦床函数结局堆栈溢出问题

// 尾递归-累加
function add1(n,total){
     if(n === 1){
          return 1 + total
     }
     return add(n-1,n+total)
}
console.log(add1(10000))


// 蹦床函数-累加(一次又一次更换函数名称,防止堆栈溢出)
 function trampoline(f){
       while(f && typeof f === 'function'){
           // 执行但不返回
           f = f()
       }
       // 返回结果
       return f
}
function add2(n,total=0){
      if(n === 1){
           return 1 + total
      }
      return add2.bind(null,n-1,n+total)
}
console.log(trampoline(add2(100000)))

 

 

posted @ 2021-08-06 13:13  卷叶小树  阅读(30)  评论(0编辑  收藏  举报