04-箭头函数

Huxzhi大约 2 分钟react18

箭头函数是传统函数表达式的简写方式,它简化了函数的编写,也带来了一些限制导致在一些场景下它无法使用。

特点:

  1. 箭头函数没有自己的 this
  2. 箭头函数中没有 arguments
    1. arguments 用来保存函数的实参。乍一看,结果是个数组,但并不是真正的数组,所以说 arguments 是一个类数组的对象(想了解真正数组与类数组对象的区别可以一直翻到最后)。将函数的 arguments 对象泄露出去了,最终的结果就是 V8 引擎将会跳过优化,导致相当大的性能损失。
    2. (...args) 代替,获取参数数组
  3. 不能作为构造函数调用
    1. 不能 new,没有 constructor
    2. 区分 普通函数和 构造函数
  4. 无法通过 callapplybind 指定函数的 this

基本语法

  • 只有一个参数的函数 参数 => 返回值
  • 如果没有参数,或多个参数,参数需要使用()括起来 () => 返回值(a, b, c) => 返回值
  • 箭头后边的值就是函数的返回值
    • 返回值必须是一个表达式(有值的语句)
    • 如果返回值是对象,必须加 ()
  • 如果需要在箭头函数中定义逻辑,可以直接在箭头后跟一个代码块, 代码块中语法和普通函数没有区别

arguments

那就很好奇了,我们每次使用 arguments 时通常第一步都会将其转换为数组,同时 arguments 使用不当还容易导致性能损失,那么为什么不将 arguments 直接设计成数组对象呢?

这需要从这门语言的一开始说起。arguments 在语言的早期就引入了,当时的 Array 对象具有 4 个方法: toString、 join、 reverse 和 sort。arguments 继承于 Object 的很大原因是不需要这四个方法。而现在,Array 添加了很多强大的方法,比如 forEach、map、filter 等等。那为什么现在不在新的版本里让 arguments 重新继承自 Array 呢?其实 ES5 的草案中就包含这一点,但为了向前兼容,最终还是被委员会否决了。