除了语法,普通函数和箭头函数有啥区别吗? [复制]

Posted

技术标签:

【中文标题】除了语法,普通函数和箭头函数有啥区别吗? [复制]【英文标题】:Besides syntax, is there any difference between a normal function and an arrow function? [duplicate]除了语法,普通函数和箭头函数有什么区别吗? [复制] 【发布时间】:2016-11-26 14:55:10 【问题描述】:

我最近开始使用 ECMAScript 2016 的箭头函数而不是原始语法来定义函数。如果我每次想定义一个函数时都使用这个语法可以吗,或者有没有像速度等缺点?

(function()
  alert('Is this');
)();

(()=>
  alert('somehow better than this?')
)();

【问题讨论】:

【参考方案1】:

需要注意的一点是箭头函数没有使用arguments 对象。

let test = () => 
  // expect an error
  console.log(arguments);


test(1,2,3);
箭头函数在词法上绑定this 您不能在箭头函数上使用new

let Person = (name) => 
  this.name = name;

   
// expect an error
let person = new Person('Bob');

有很多不同之处,我会检查一些documentation 的箭头函数。

【讨论】:

我还注意到,Firefox 使用箭头函数的时间要多 2-3 倍,但我只是做了一个快速的性能测试。【参考方案2】:

箭头函数总是匿名的并且有lexical this。性能上的差异应该可以忽略不计,但this 可能指的是意想不到的东西(或者它可能指的是您所期望的并且您不必绑定)。

【讨论】:

以上是关于除了语法,普通函数和箭头函数有啥区别吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

论普通函数和箭头函数的区别以及箭头函数的注意事项不适用场景

论普通函数和箭头函数的区别以及箭头函数的注意事项不适用场景

详解箭头函数和普通函数的区别以及箭头函数的注意事项不适用场景

详解箭头函数和普通函数的区别以及箭头函数的注意事项不适用场景

详解箭头函数和普通函数的区别以及箭头函数的注意事项不适用场景

箭头函数和立即执行函数