根据MDN,箭头函数表达式在语法上是常规函数表达式的紧凑替代方案,尽管没有与this,arguments,super或new.target关键字的绑定。箭头函数表达式不适合用作方法,并且不能用作构造函数。
JavaScript中的常规函数和箭头函数有3个细微的差别。
没有这个绑定
箭头功能没有自己的值。箭头函数中的this的值始终从封闭范围继承。
this.a = 100; let arrowFunc = () => {this.a = 150}; function regFunc() { this.a = 200; } console.log(this.a) arrowFunc() console.log(this.a) regFunc() console.log(this.a)
输出结果
这将给出输出-
100 150 150
看到箭头功能更改了此对象的范围。常规函数只是在其内部进行了更改。
箭头函数没有参数数组在函数中的JS参数数组中是一个特殊的对象,可用于获取传递给函数的所有参数。与此类似,箭头函数没有自己绑定到arguments对象的功能,它们绑定到了封闭范围的参数。
箭头函数是可调用的,但不可构造。如果函数是可构造的,则可以使用new调用它,即new User()
。如果一个函数是可调用的,则可以在不使用新函数的情况下对其进行调用(即正常的函数调用)。
通过函数声明/表达式创建的函数既可构造也可调用。
箭头函数(和方法)仅可调用。类构造函数仅是可构造的。
如果尝试调用不可调用函数或构造非构造函数,则会出现运行时错误。
let arrowFunc = () => {} new arrowFunc()
输出结果
此代码给出错误-
arrowFunc is not a constructor