ES6 中的箭头函数与普通函数的异同

阅读时长 5 分钟读完

ES6 中的箭头函数与普通函数的异同

在 ES6 中引入了箭头函数,箭头函数是一个很方便的新特性,可以使代码更加简洁易读。本文将详细介绍箭头函数与普通函数的异同,以及在什么场合使用箭头函数更加适合。

箭头函数与普通函数的语法

普通函数的语法:

箭头函数的语法:

如果函数体只有一条语句则可以省略大括号,例如:

箭头函数与普通函数的作用域

箭头函数与普通函数的最大区别在于其作用域。 普通函数中 this 是动态的,根据当前上下文的不同而不同。 而箭头函数中的 this 是静态的,它的值取决于箭头函数所在的作用域中的 this。

举个例子:

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

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

在普通函数中,函数的执行上下文会动态地改变 this 的值。在上述例子中,当我们将 obj 中的 greet 函数赋值给 obj2 中的 greet 属性时,函数的执行上下文就变成了 obj2,this 的值也随之变为了 obj2。

而在箭头函数中,this 的值在箭头函数定义时就已经确定了,不会再发生改变。 例如:

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

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

在这个例子中,箭头函数 sayHi 定义时使用了 this,但 this 的实际值是由 greet 决定的。因此,在调用 obj.greet()obj2.greet() 时都可以正常输出 "Hello, my name is Alice"。

箭头函数的优势与应用场景

由于箭头函数代码更加简单易读,所以在很多场合使用箭头函数都会更为便捷。 如下例中,使用箭头函数来定义数组的 map 函数可以使代码更加简洁:

另一个常见的应用场景是在 React 组件中使用箭头函数来定义方法。 在 React 组件中经常需要绑定事件处理函数到组件实例上,否则 this 的值会出乎意料地改变。 例如:

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

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

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

这种写法在很多 React 项目中都很常见。但是,仅仅是因为绑定事件处理函数而增加了很多额外的代码,让页面的可读性降低。

而使用箭头函数,可以更加方便地绑定事件处理函数:

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

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

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

通过这种方式,我们可以使代码更加容易理解和可读。

总结

在使用箭头函数时,尽管它提供了便利的代码写法,但一定要注意函数的作用域。如果你需要在函数体内使用 this,并且需要使它动态地根据执行上下文改变,则不应该使用箭头函数。而对于绝大部分的普通函数逻辑,使用箭头函数可能能够让代码更加简洁易读。

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

纠错
反馈