今天我观察了以下语法(简化示例):
const test = fn => () => console.log(fn)
test('foo')();

我很难把头包裹起来,但对我来说仍然模糊不清。一步一步究竟发生了什么?
答案 0 :(得分:2)
让我们以一种可能更容易理解的方式重写这个
const test = function(fn){
return function (){
console.log(fn);
}
}
test('foo')();
你现在明白了吗?如果是,这与您的示例相同,只使用普通函数而不是箭头函数。
您还需要知道闭包是什么来理解这一点。
答案 1 :(得分:2)
正如已经提到的答案,你正在创建一个闭包。
在我的回答中,我想说对于有什么好处:
想象你想要问候三个人,其中两个是你的朋友,一个是你的老板。你想用"嗨" 来迎接你的朋友,但你的老板用"你好" 。
const greet = greetingWord => name =>
`${greetingWord}, ${name}`
const greetFrind = greet('Hi')
const greetBoss = greet('Hello')
我们创建一个函数greet
,它接受一个争论,它将返回一个带有一个参数的新函数(greet = greetingWord => name
)。一旦我们实施它,我们就可以为我们的朋友和老板定义一个欢迎。
const greet = greetingWord => name =>
`${greetingWord}, ${name}`
const greetFrind = greet('Hi')
const greetBoss = greet('Hello')
console.log(greetFrind('Paul'))
console.log(greetFrind('Julia'))
console.log(greetBoss('Mr. Paker'))

答案 2 :(得分:1)
所以这是JavaScript中闭包的基本概念。如果您重写ES5中的代码:
var test = function(fn){
return function(){
console.log(fn);
};
}
test('foo')();
因此内部函数可以访问传递给外部函数的参数。这就是为什么你得到"foo"