ES6 的箭头函数与普通函数的区别及应用场景

阅读时长 5 分钟读完

在现代的前端开发中,箭头函数已经变得越来越普遍。在 2015 年发布的 ECMAScript 6(简称 ES6)规范中,箭头函数成为了 JavaScript 新增的语言特性之一。箭头函数看起来很像普通函数,但是它们有着与普通函数不同的特性和应用场景。本文将详细介绍 ES6 的箭头函数与普通函数之间的区别和使用场景。

箭头函数的语法和特性

箭头函数的语法看起来很简单,使用一个箭头(=>)来分隔函数参数和函数体,如下所示:

-- -------------------- ---- -------
-- ----
-------- ----------- -
  ------------------- -----------
-

-- ----
----- ----- - ---- -- -
  ------------------- -----------
--

上述代码定义了一个普通函数 greet 和一个箭头函数 greet,它们的功能是一样的。然而,箭头函数还有一些与普通函数不同的特性:

没有 this 绑定

在 JavaScript 中,函数的 this 指向的是调用该函数的对象。但是,在普通函数中,this 的值可以通过 bindapplycall 来绑定特定的对象。而箭头函数没有自己的 this 绑定,它们继承了外围作用域的 this 值。这意味着:

  • 在全局作用域中,箭头函数的 this 值指向的是 window(或者 global)对象。
  • 在对象方法中,箭头函数的 this 值指向的是对象本身。
  • 在事件处理函数中,箭头函数的 this 值与事件处理函数所附加的元素的 this 值相同。

下面是一些示例代码:

-- -------------------- ---- -------
-- ------------- ---- -- ------ --
----- ------ - -- -- -
  ---------------- --- --------
--
--------- -- ----

-- ------------ ---- ----
----- ----- - -
  ----- --- --------
  ------- -- -- -
    ---------------- --- -------
  -
--
--------------- -- ----

-- -------------- ---- ---- ---- --
------------------------------------------------------------- -- -- -
  ---------------- --- --------------
---

简化的语法

当一个箭头函数只有一个参数时,可以省略参数的括号;当一个箭头函数只有一条语句时,可以省略花括号和 return 关键字。下面是一些示例代码:

箭头函数的应用场景

由于箭头函数有着与普通函数不同的特性,它们适用于不同的场景和用例。下面是一些使用箭头函数的场景:

遍历函数和回调函数

在 JavaScript 中,遍历函数和回调函数的定义通常很短。通常,“遍历”和“回调”只是为了提供一个函数体,并为每个循环元素或异步操作调用该函数体。由于箭头函数的简洁语法,它们适用于这种场景:

-- -------------------- ---- -------
-- ----
----- ------ - --- -- -- -- ---
----- ----------- - ------------ -- - - ---
------------------------- -- --- -- -- -- ---

-- ----
----- --------- - --- ----------------- ------- -- -
  -- -------------- - ---- -
    --------------------
  - ---- -
    -------------------
  -
---
--------------------- -- --------------------
         ------------ -- --------------------

只有一个简单表达式的函数

对于只有一个简单表达式的函数,可以使用省略花括号和 return 的箭头函数简化代码:

上下文不变的对象方法

在对象方法中使用箭头函数可以确保函数体中的 this 值指向对象本身,不会发生误解:

上述示例代码输出 undefined 是因为箭头函数没有自己的 this 绑定,它们继承了外围作用域的 this 值,而全局作用域中的 this 值是 undefined

总结

箭头函数是 ECMAScript 6 中的新特性之一,与普通函数不同之处在于它们没有自己的 this 绑定,并且支持简化的语法。在遍历函数、回调函数、只有一个简单表达式的函数和上下文不变的对象方法中,箭头函数都是很好的选择。在使用箭头函数时,要注意它们继承的外围作用域的 this 值,以免出现异常结果。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65004c0195b1f8cacde78d39

纠错
反馈