ES6-函数的扩展总结-02

1、函数的name属性,获取函数名

(function aaaa() {
    
    }).name // 'aaaa'

//匿名函数返回空字符串
(function () {
    
    }).name // ''
(function eee() {
    
    }).name // 'eee'

// 构造函数都返回 anonymous
(new Function).name // 'anonymous'

// bind 返回的函数,会在 name之前加上 bound
(function aaa() {
    
    }).bind({
    
    }).name // 'bound aaa'
function www() {
    
    }
www.bind(function eeee() {
    
    }).name // bound www

2、箭头函数

① 箭头函数 没有自己的 this, 里面的 this 是固定的,指向运行时所在的作用域

② 箭头函数不能作为构造函数,不能用 new 命令,否则报错

③ 箭头函数没有 yield 命令,不能用作持 Generate 函数

④ 箭头函数不能使用 arguments,可以用 rest 来代替

3、尾调函数:指的是最后一步是调用函数

// 尾调函数
function aaa1() {
    
    
  return bbb() // 最后一步调用函数,称为尾调用
}
// 尾调函数
function aaa2(n) {
    
    
  if(n > 111){
    
    
    return bbb() // 最后一步调用函数,称为尾调用(不一定是函数的最后一步)
  }
  return bbb1() // 最后一步调用函数,称为尾调用(不一定是函数的最后一步)
}
function bbb() {
    
    }
function bbb1() {
    
    }


// 非尾调函数
function a1() {
    
    
  return bbb() + 1 //最后一步是加法操作
}
// 非尾调函数
function a2() {
    
    
  let y = bbb()
  return y //最后一步是赋值操作
}
// 非尾调函数
function a3() {
    
    
  bbb() //这个相当于是执行这些代码:  bbb(); return undefined;
}

4、尾调用优化: 当不需要用到外层函数的变量,直接用内层函数来取代外层函数,这个过程就是尾调用优化。
只有尾调用函数才能进行实现。只有safari支持,chrome和Firefox不支持

function a(){
    
    
    return b(3)
}
function b(x) {
    
    
  console.log(x)
}
a()

// 对函数 a 进行 尾调用优化,直接用内层函数 b 取代外层函数 a
function b(x) {
    
    
  console.log(x)
}
b(3)

5、尾递归:尾调用函数调用自身

function x(n) {
    
    
  return n * x(n - 1)
}

就记录到这,祝大家开心~
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37600506/article/details/123271730
今日推荐