《ES6标准入门》(四)之箭头函数和尾递归

本文详细介绍了ES6中的箭头函数及其基本用法,包括箭头函数的简洁形式、回调函数的应用及注意事项,如this固定、不能使用new、arguments等。此外,还探讨了尾调用的概念,解释了尾调用优化的意义,以及如何通过尾递归来避免栈溢出。文章通过实例展示了如何将非尾递归的递归函数改写为尾递归,以提高内存效率。
摘要由CSDN通过智能技术生成

1 基本用法

箭头函数是ES6中被应用的最广泛的语法之一了,关键在于其形式简单:

var f = v => v;

上面的箭头函数等同于:

var f = function(v) {
   
  return v;
};

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

var f = () => 5;
// 等同于
var f = function () {
    return 5 };

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
   
  return num1 + num2;
};

箭头函数的一个用处是简化回调函数。

// 正常函数写法
[1,2,3].map(function (x) {
   
  return x * x;
});

// 箭头函数写法
[1,2,3].map(x => x * x);

下面是 rest 参数与箭头函数结合的例子

const numbers = (...nums) => nums;

numbers(1, 2, 3, 4, 5)
// [1,2,3,4,5]

const headAndTail = (head, ...tail) => [head, tail];

headAndTail(1, 2, 3, 4, 5)
// [1,[2,3,4,5]]

2.使用注意点

1)函数体内的this对象就是定义时所在的对象,而不是使用时所在的对象(this对象的指向是可变的,但是在箭头函数中它是固定的)

2)不可以当做构造函数,即不可以使用new命令,否则会报错

3)不可以使用arguments对象,该对象在函数体内不存在。可以用rest参数代替

4)不可以使用yield命令,因此箭头函数不能用作Generator函数

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

var id = 21;

foo.call({ id: 42 });
// id: 42

上面的代码中,setTimeout的参数是一个箭头函数,100ms后执行,如果是普通函数,执行时this应该指向全局对象,但是箭头函数导致this总是指向函数所在的对象

除了this,以下三个变量在箭头函数中也是不存在的,分别指向外层函数的对应变量:

arguments、super和new.target

另外,由于箭头函数没有自己的this,当然也就不能用call(),apply(),bind()这些方法去改变this的指向。

附链接:阮老师的JavaScript的this原理JavaScript的this用法

3 嵌套的箭头函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值