3 回答

TA贡献1794条经验 获得超8个赞
没有(重大)差异。
嗯,好吧,这有点不成熟。箭头功能有三个独特的微小差异。
箭头功能不能用于
new
。当然,这意味着它们没有
prototype
属性,不能用于创建具有经典灵感语法的对象。new (() => {}) // TypeError: () => {} is not a constructor
这可能是最好的,但是
new
对于绑定函数来说,工作方式没有多大意义。箭头函数无权访问
arguments
普通JavaScript函数可以访问的特殊对象。(() => arguments)(1, 2, 3) // ReferenceError: arguments is not defined
这可能是一个问题。据推测,这是为了消除JavaScript的其他奇怪之处。的
arguments
对象是自己的特殊兽,它有奇怪的行为,所以它并不奇怪,这是抛出。相反,ES6有splats,可以完成相同的事情,没有任何神奇的隐藏变量:
((...args) => args)(1, 2, 3) // [1, 2, 3]
箭头函数没有自己的
new.target
属性,它们使用new.target
它们的封闭函数(如果存在)。这与删除箭头函数的“神奇”引入值的其他更改一致。
new
如上所述,考虑到箭头功能无论如何都不能使用,这种特别的变化是特别明显的。
否则,箭头就像绑定函数一样,在语义上。箭头可能更有效,因为它们不需要携带额外的行李,因为它们不需要首先从普通功能转换,但它们的行为完全相同。

TA贡献1777条经验 获得超10个赞
这是一个更微妙的区别:
箭头函数可以在不使用'return'关键字的情况下返回值,方法是省略=>后面的{}括号。
var f=x=>x; console.log(f(3)); // 3
var g=x=>{x}; console.log(g(3)); // undefined
var h=function(x){x}; console.log(h(3)); // undefined
var i=x=>{a:1}; console.log(i(3)); // undefined
var j=x=>({a:1}); console.log(j(3)); // {a:1}
添加回答
举报