Javascript 了解arrow函数es6

Javascript 了解arrow函数es6,javascript,function,ecmascript-6,lexical,arrow-functions,Javascript,Function,Ecmascript 6,Lexical,Arrow Functions,我试图理解es6新的arrow函数语法,以及它与我已经知道的内容的关系 我的理解是箭头函数具有 没有名字 无参数对象 没有成为发电机的能力 词汇这个 那么,只要您不使用arguments对象,并且认为它是针对箭头的,并且不使用箭头作为生成器,那么下面的概念正确吗 function () {}.bind(this); // synonym for () => {}; given the contraints above ??? 我的主要问题是。我是否遗漏了有关箭头函数的一些基本信息?这

我试图理解es6新的arrow函数语法,以及它与我已经知道的内容的关系

我的理解是箭头函数具有

  • 没有名字
  • 无参数对象
  • 没有成为发电机的能力
  • 词汇这个
那么,只要您不使用arguments对象,并且认为它是针对箭头的,并且不使用箭头作为生成器,那么下面的概念正确吗

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

我的主要问题是。我是否遗漏了有关箭头函数的一些基本信息?

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

(function test(){
   let test2 = () => console.log(this,arguments);
   test2();
}).bind({heya:true})(4,5);
这将记录:“{heya:true},[4,5]”;为什么?因为arguments对象和this上下文在Arrow函数体内保持不变:外部/词汇上下文不变

此外,虽然Arrow函数本身没有定义function.name意义上的名称,但您当然可以将其指定给一个名称,然后在Arrow函数体中使用该名称,与此currying函数一样:

var curry = (f, ...args) => {
  if (f.length <= args.length){
    return f(...args);
  }
  return (...more) => curry(f, ...args, ...more);
};
var curry=(f,…args)=>{
如果(f.长度咖喱(f,…args,…更多);
};

“不能成为迭代器”这意味着什么?函数从来都不是迭代器。你是指构造函数吗?@FelixKling抱歉,我指的是生成器。我会更新这个问题。你说它们没有名字是什么意思?你可以这样做:
f=(a,b,c)=>a+b+c
@Cristy我的意思是函数本身是一个未命名的函数。f是引用箭头的标识符。f不是箭头的名称。@t3dodson如果这是你的问题,那么就不是。你也不能
新建
箭头函数。在ES6中,这会引发错误。