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)
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值