JavaScript中普通函数和箭头函数的区别
根据MDN文档,箭头函数表达式是普通函数表达式的一种语法上更简洁的替代方案,但它没有自己的`this`、`arguments`、`super`或`new.target`关键字绑定。箭头函数表达式不适合用作方法,也不能用作构造函数。
JavaScript中普通函数和箭头函数有三个细微的区别。
没有自己的`this`绑定
箭头函数没有自己的`this`值。箭头函数内部的`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
可以看到,箭头函数改变了其作用域之外的`this`对象。普通函数只在其自身的`this`内部进行了更改。
箭头函数没有`arguments`数组
在JS中,函数中的`arguments`数组是一个特殊的对象,可以用来获取传递给函数的所有参数。与之类似,箭头函数没有自己对`arguments`对象的绑定,它们绑定到封闭作用域的参数。
箭头函数是可调用的,但不可构造的
如果一个函数是可构造的,它可以用`new`调用,例如`new User()`。如果一个函数是可调用的,它可以不用`new`调用(即普通函数调用)。
通过函数声明/表达式创建的函数既可构造又可调用。
箭头函数(和方法)仅可调用。类构造函数仅可构造。
如果您尝试调用不可调用的函数或构造不可构造的函数,将会得到运行时错误。
let arrowFunc = () => {} new arrowFunc() This code gives the error: arrowFunc is not a constructor
广告