我正在尝试理解 es6 的新箭头函数语法以及它与我已经知道的内容之间的关系。
我的理解是箭头函数有
- 没有名字
- 没有参数对象
- 没有发电机的能力
- 词法this
只要您不使用参数对象并认为它是用于箭头并且不使用箭头作为生成器,那么以下概念是否正确
function () {}.bind(this); // synonym for () => {}; given the contraints above ???
我的主要问题是。 我是否遗漏了箭头函数的一些基本知识?
最佳答案
这基本上是正确的,但是说 Arrow 函数“没有”参数对象可能会让人感到困惑,因为这可能意味着它是未定义的。他们不做的是重新定义他们自己或他们自己的那个关键字,所以它仍然被定义为它已经在词法范围内的任何东西:
(function test(){
let test2 = () => console.log(this,arguments);
test2();
}).bind({heya:true})(4,5);
那将记录:“{heya: true}, [4, 5]”;为什么?因为 arguments 对象和 this 上下文只是在 Arrow 函数体内保持相同:外部/词法上下文没有改变。
此外,虽然箭头函数本身没有定义 function.name 意义上的名称,但您当然可以将其分配给一个名称,然后在箭头函数的主体中使用该名称,就像这样柯里化(Currying)函数:
var curry = (f, ...args) => {
if (f.length <= args.length){
return f(...args);
}
return (...more) => curry(f, ...args, ...more);
};
关于javascript - 箭头函数的理解es6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34698155/