tl;博士: 不!箭头函数和函数声明/表达式不是等价的,不能盲目替换.
如果要替换的函数不使用this
,arguments
并且未调用new
,则为yes.
经常这样:这取决于.箭头函数与函数声明/表达式具有不同的行为,因此我们先看一下差异:
词汇this
和arguments
箭头功能没有自己的this
或arguments
绑定.相反,这些标识符在词法范围内像任何其他变量一样被解析.这意味着在箭头函数内部,this
并arguments
参考环境中的值this
和arguments
箭头函数的定义(即箭头函数的"外部"):
// Example using a function expression
function createObject() {
console.log('Inside `createObject`:', this.foo);
return {
foo: 42,
bar: function() {
console.log('Inside `bar`:', this.foo);
},
};
}
createObject.call({foo: 21}).bar(); // override `this` inside createObject