ES6 箭头函数与传统函数的区别

在ECMAScript6中,箭头函数是其中最有趣的新增特性。顾名思义,箭头函数是一种使用箭头(=>)定义函数的新语法,但是它与传统的JavaScript函数有些许不同,主要集中在以下方面:

  • 没有this、super、arguments和new.target绑定
    箭头函数中的this、super、arguments及new.target这些值由外围最近一层非箭头函数决定。

  • 不能通过new关键字调用
    箭头函数没有[[construct]]方法,所以不能被用作构造函数,如果通过new关键字调用箭头函数,程序会抛出错误。

  • 没有原型
    由于不可以能过new关键字调用箭头函数,因而没有构建原型的需求,所以箭头函数不存在prototype这个属性。

  • 不可以改变this的绑定
    函数内部的this值不可被改变,在函数的生命周期中始终保持一致。

  • 不支持arguments对象
    箭头函数没有arguments绑定,所以你必须通过命名参数和不定参数这两种形式访问函数参数。

  • 不支持重复的命名参数
    无论在严格模式还是非严格模式下,箭头函数都不支持重复的命名参数;而在传统函数的规定中,只在严格模式下才不能有重复的命名参数。

这些差异的产生有如下几个原因:
首先,也是最重要的,this绑定是JavaScript程序中一个常见的错误来源,在函数内很容易就对this的值失去控制,其经常导致程序出现意想不到的行为,箭头函数消除了这方面的烦恼;其次,如果限制箭头函数的this值,简化代码执行的过程,则JavaScript引擎可以更轻松地优化这些操作,而常规函数往往同时会作为构造函数使用或者以其他方式对其进行修改。
在箭头函数内,其余的差异主要是减少错误以及理清模糊不清的地方。这样一来JavaScript引擎就可以更好的优化箭头函数的执行过程。

来源深入理解ES6

你可能感兴趣的:(深入理解ES6)