1

我试图了解 es6 的新箭头函数语法以及它与我已经知道的内容的关系。

我的理解是箭头函数有

  • 无名
  • 无参数对象
  • 没有能力成为发电机
  • 词法 this

只要您不使用参数对象认为它是用于箭头并且不将箭头用作生成器,那么以下概念是否正确

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

我的主要问题是。我是否缺少有关箭头功能的基本知识?

4

1 回答 1

2

这基本上是正确的,但是说箭头函数有“没有”参数对象可能太令人困惑了,因为这可能意味着它是未定义的。他们不做的是在自己内部或为自己重新定义该关键字,因此它保持定义为它已经在词法范围内的任何内容:

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

这将记录:“{heya: true}, [4, 5]”; 为什么?因为 arguments 对象和 this 上下文在 Arrow 函数体内保持不变:外部/词法上下文没有改变

此外,虽然箭头函数本身没有定义 function.name 意义上的名称,但您当然可以将其分配给一个名称,然后在箭头函数的主体中使用该名称,就像这个柯里化函数一样:

var curry = (f, ...args) => {
  if (f.length <= args.length){
    return f(...args);
  }
  return (...more) => curry(f, ...args, ...more);
};
于 2016-01-14T22:34:34.063 回答