繁体   English   中英

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

[英]functions returned from other functions in javascript

我是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')

控制台输出:

“可以从其他功能返回功能!” “ CREATESCREAM返回功能!!!” “尖叫返回功能!!!”

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

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

提前致谢!

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

花费一些时间来做这是很正常的,但是尝试逐步执行代码,您会得到:

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

并考虑使用中的执行顺序:

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

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

您的摘要:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM