ES6的箭头函数

举报
搞前端的半夏 发表于 2022/06/30 21:53:17 2022/06/30
【摘要】 ECMAScript 中最受欢迎的功能之一是箭头函数。你可能想知道为什么需要使用它们?让我给你一个答案:这是因为箭头函数最适合任何需要this绑定到上下文的东西,而不是函数本身。 语法举个例子:下面的函数是用旧的/ES5 语法编写的:function sum(a,b) { return a+b}将他改造成箭头函数:const sum = (a,b) => a + b我们改造成了一行代码...

ECMAScript 中最受欢迎的功能之一是箭头函数。你可能想知道为什么需要使用它们?让我给你一个答案:这是因为箭头函数最适合任何需要this绑定到上下文的东西,而不是函数本身。

语法

举个例子:

下面的函数是用旧的/ES5 语法编写的:

function sum(a,b) {
    return a+b
}

将他改造成箭头函数:

const sum = (a,b) => a + b

我们改造成了一行代码!箭头函数使代码更加简洁。由于隐式返回,我们可以省略花括号和 return 关键字。
如果我们有多行代码,那么我们必须使用花括号并返回关键字:

const printSum = (a,b) => {

  const answer = a + b;
  console.log("Result: ", answer)

  return answer;
}


当只有一个参数时,括号是可选的.


const square = n => n * n

square(3)    //return --> 9

箭头函数的常见情况是使用数组方法。举个例子:

let numbers = [1, 2, 3, 4];

numbers.map(num => num+1); 

//  Output --> [2,3,4,5]

何时不使用箭头函数

到目前为止,我们已经讨论了箭头函数的强大和实用性。现在是时候讨论什么时候不使用箭头函数了。
箭头函数在执行时不会创建自己的作用域。它们绑定到它们的封闭范围上下文,这意味着与常规函数不同,箭头函数没有自己的this.
例如:

const Person = () => {
  this.name = name;
  console.log(this);
}

const alex = new Person("Alex");   

// Uncaught TypeError: Person is not a constructor

在箭头函数中,它们没有自己的作用域,因此 this 将引用窗口对象。这导致 this 是一个窗口对象,并且它的任何属性都未定义。

再来看一个例子:


var obj = { // does not create a new scope
  i: 10,
  b: () => console.log(this.i, this),
  c: function() {
    console.log(this.i, this);
  }
}

obj.b(); // prints undefined, Window {...} (or the global object)
obj.c(); // prints 10, Object {...}

如我们所见,使用箭头函数创建的方法 b 输出一个未定义的值和一个窗口对象;而使用常规函数构造的方法 c 正确输出。

结论:

箭头函数是 ES6 的一个很好的新增功能,它为我们带来了一个语法紧凑的常规函数替代方案。箭头函数没有自己的 this。this使用封闭词法范围的值。箭头函数不适合用作方法,它们不能用作构造函数。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。