1.1 简洁性,更紧凑的语法。
1.2 解决传统函数的 this 绑定问题。
1.3 函数的二义性问题。
传统函数中,this 的值是在运行时确定的,这导致了在回调函数中经常需要使用 bind 方法或者 var self = this; 的方式来绑定 this。箭头函数通过捕获其外部作用域的 this,解决了传统函数中 this 绑定的不确定性。
1.通过call或apply或bind调用,箭头函数会忽悠第一个参数
function regularFunction() {
console.log(this.value);
}
const arrowFunction = () => {
console.log(this.value);
};
const obj1 = { value: 1 };
regularFunction.call(obj1); // 1
arrowFunction.call(obj1); // undefined
regularFunction.apply(obj1); // 1
arrowFunction.apply(obj1); // undefined
const boundArrowFunction = arrowFunction.bind(obj1);
boundArrowFunction(); // undefined
2.不可以使yield(使用于生成器函数中)。其一是箭头函数是捕获外部作用域的this而生成器函数可能会有自己的this绑定,可以导致不一致的混淆,其二生成器函数使用 function* 关键字定义,并且可以使用 yield 关键字来在函数内部暂停和恢复执行。这种特殊的语法结构需要被设计成独立的函数类型,而箭头函数的简洁语法不包括这些生成器函数的特殊结构。
在传统函数中,函数的含义通常是表意不明的,一个函数既可以作为普通函数直接调用,又可以当做构造函数使用。
无法通过new 关键字调用,也没有关于对象的一下信息,如super, new.target,prototype。
不支持arguments,作为历史遗留的问题,有Rest参数的替代就没必要支持了。其次箭头函数通过词法作用域捕获其外部上下文的变量,其中就有arguments(外层最近的非箭头函数的 arguments 对象(如果存在的话),或者是全局对象的arguments对象。)
41 天前