理解箭头功能es6

时间:2016-01-09 19:50:40

标签: javascript function ecmascript-6 lexical arrow-functions

我正在尝试理解es6的新箭头函数语法以及它与我已经知道的内容之间的关系。

我的理解是箭头功能

  • 没有名字
  • 没有参数对象
  • 没有成为发电机的能力
  • Lexical this

只要您没有使用参数对象,认为它是箭头而不是使用箭头作为生成器,那么以下概念是正确的

function () {}.bind(this); // synonym for () => {}; given the contraints above ???

我的主要问题是。 我是否遗漏了箭头功能的基本内容?

1 个答案:

答案 0 :(得分:2)

这基本上是正确的,但是说箭头功能没有"没有"它可能太混乱了。 arguments对象,因为这可能暗示它未被定义。他们不做的是重新定义这个关键词本身或他们自己,所以它被定义为词法范围内的任何关键词:

(function test(){
   let test2 = () => console.log(this,arguments);
   test2();
}).bind({heya:true})(4,5);

记录:" {heya:true},[4,5]&#34 ;;为什么?因为arguments对象和this上下文只是保持在Arrow函数体内相同:外部/词汇上下文没有改变。

此外,虽然Arrow函数本身没有定义function.name意义上的名称,但您当然可以将其分配给名称,然后在箭头函数体内使用该名称,如这个currying功能:

var curry = (f, ...args) => {
  if (f.length <= args.length){
    return f(...args);
  }
  return (...more) => curry(f, ...args, ...more);
};