ES6 中的普通函数和箭头函数的区别

阅读时长 5 分钟读完

JavaScript 是一门动态语言,它的语法和功能在不断地发展和改进。ES6(ECMAScript 6)是 JavaScript 的一个重要版本,它引入了很多新特性,其中包括箭头函数。在 ES6 中,我们可以使用两种方式来定义函数:普通函数和箭头函数。虽然它们都可以用来定义函数,但是它们之间还是有很多的区别。本文将详细介绍 ES6 中普通函数和箭头函数的区别,并且给出一些示例代码。

普通函数

在 ES6 之前,我们通常使用普通函数来定义函数。普通函数的语法如下:

普通函数可以使用 function 关键字来定义,后面跟着函数名、参数列表和函数体。函数体可以包含多条语句,我们可以在函数体内使用 return 关键字来返回函数执行的结果。普通函数可以使用 new 关键字来创建一个新的对象,也可以使用 call()apply() 方法来改变函数的上下文。

箭头函数

ES6 引入了箭头函数,它可以用来更简洁地定义函数。箭头函数的语法如下:

箭头函数使用 => 符号来定义,它可以省略 function 关键字和函数名。如果函数只有一个参数,可以省略参数列表的括号。如果函数的函数体只有一条语句,可以省略大括号和 return 关键字。箭头函数的返回值就是函数体的结果。箭头函数不能使用 new 关键字来创建新的对象,也不能使用 call()apply() 方法来改变函数的上下文。

普通函数和箭头函数的区别

虽然普通函数和箭头函数都可以用来定义函数,但它们之间还是有很多的区别。下面是普通函数和箭头函数的区别:

  1. this 指向不同: 在普通函数中,this 指向调用函数的对象。在箭头函数中,this 指向定义箭头函数的上下文对象。如果在箭头函数中使用了 this,它将指向定义箭头函数的上下文对象,而不是调用函数的对象。
-- -------------------- ---- -------
----- --- - -
  ----- ------
  ------ ---------- -
    ---------------- -- ---- -- ---------------
  --
  ----------- -- -- -
    ---------------- -- ---- -- ---------------
  -
--

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

在上面的例子中,obj.sayHi() 中的 this 指向 obj,而 obj.sayHiArrow() 中的 this 指向全局对象,因为箭头函数的上下文是全局对象。

  1. arguments 对象不同: 在普通函数中,我们可以使用 arguments 对象来获取函数的参数列表。在箭头函数中,arguments 对象不存在,我们需要使用剩余参数来获取函数的参数列表。
-- -------------------- ---- -------
-------- ----- -
  --- ----- - --
  --- ---- - - -- - - ----------------- ---- -
    ----- -- -------------
  -
  ------ ------
-

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

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

在上面的例子中,sum() 函数使用 arguments 对象来获取函数的参数列表,而 sumArrow() 函数使用剩余参数来获取函数的参数列表。

  1. 不能使用 new 关键字: 箭头函数不能使用 new 关键字来创建新的对象,因为它没有自己的 this 值。
-- -------------------- ---- -------
-------- ------------ -
  --------- - -----
-

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

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

在上面的例子中,Person 函数可以使用 new 关键字来创建新的对象,而 PersonArrow 函数不能使用 new 关键字来创建新的对象。

总结

普通函数和箭头函数都可以用来定义函数,但它们之间还是有很多的区别。普通函数和箭头函数在 this 指向、arguments 对象和 new 关键字方面都有不同。在实际开发中,我们需要根据不同的情况选择使用不同的函数类型。

参考资料

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

纠错
反馈