函数内部的Javascript函数

时间:2018-02-14 19:54:12

标签: javascript design-patterns functional-programming

今天我观察了以下语法(简化示例):



const test = fn => () => console.log(fn)	
test('foo')();




我很难把头包裹起来,但对我来说仍然模糊不清。一步一步究竟发生了什么?

3 个答案:

答案 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"