从javascript中其他函数返回的函数

时间:2018-06-23 02:34:16

标签: javascript function return arguments

我是Java语言的新手,我陷入了“ 从其他函数返回的函数”中。 代码如下。

var createScream = function(logger) { return function(message) {
            logger(message.toUpperCase() + "!!!")
        }
}

const scream = createScream(message => console.log(message))

scream('functions can be returned from other functions')
scream('createScream returns a function')
scream('scream invokes that returned function')

控制台输出:

  

“可以从其他功能返回功能!” “秘技   返回功能!!!!!!!!”;“返回已返回功能的代码!!!

问题:为什么它会以这种方式工作?执行的过程是什么? 功能尖叫有任何参数吗?如何运作?

这可能很容易,我进行了搜索,但没有明确的解释。 有人可以给我提示或详细解释整个执行过程吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

在JavaScript和其他功能语言中,您会听到术语功能是“一等公民”,这意味着功能可以作为值传递或由其他功能引用。

花点时间做些正常的事是正常的,但是尝试逐步浏览代码,您会得到它:

  • createScream函数接受一个函数作为输入(记录器)
  • 然后,createScream函数返回另一个接受其自身输入(消息)的函数
  • 返回的函数使用原始输入函数(记录器)以及第二个输入(消息)

并考虑使用顺序:

  • scream通过console.log函数调用createScream
  • 现在,当您通过消息调用scream时,该消息将首先根据createScream中的定义进行更改
  • 然后更改消息后,将由记录器功能console.log
  • 调用

答案 1 :(得分:0)

首先,高阶函数与功能语言无关。在其他函数上进行操作的函数,即以一个函数作为参数并返回另一个函数,称为高阶函数。

您的代码段:

  • 您使用参数logger创建了一个匿名函数,该匿名函数返回了另一个匿名函数并将其绑定到变量createScream。

  • 然后您以函数作为参数调用了createScream。将返回值存储在const scream中。此时,您将返回一个函数,其中参数logger是您传递的胖箭头函数。

  • 现在,您用琴弦叫喊了。请记住,尖叫也是一个函数,因为在较早的步骤中,该函数调用返回了另一个函数。该函数可以访问传递给外部函数的logger参数。这是关闭的示例。

  • 当您使用字符串呼叫尖叫时。调用返回的函数,该函数以大写字母加!!!记录消息。

如果您的编程经验有限,那么可能需要一些时间才能了解此处的情况。阅读有关高阶函数,词法范围,闭包的信息。