我是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')
控制台输出:
“可以从其他功能返回功能!” “秘技 返回功能!!!!!!!!”;“返回已返回功能的代码!!!
问题:为什么它会以这种方式工作?执行的过程是什么? 功能尖叫有任何参数吗?如何运作?
这可能很容易,我进行了搜索,但没有明确的解释。 有人可以给我提示或详细解释整个执行过程吗?
谢谢!
答案 0 :(得分:0)
在JavaScript和其他功能语言中,您会听到术语功能是“一等公民”,这意味着功能可以作为值传递或由其他功能引用。
花点时间做些正常的事是正常的,但是尝试逐步浏览代码,您会得到它:
并考虑使用顺序:
console.log
函数调用createScream console.log
答案 1 :(得分:0)
首先,高阶函数与功能语言无关。在其他函数上进行操作的函数,即以一个函数作为参数并返回另一个函数,称为高阶函数。
您的代码段:
您使用参数logger创建了一个匿名函数,该匿名函数返回了另一个匿名函数并将其绑定到变量createScream。
然后您以函数作为参数调用了createScream。将返回值存储在const scream中。此时,您将返回一个函数,其中参数logger是您传递的胖箭头函数。
现在,您用琴弦叫喊了。请记住,尖叫也是一个函数,因为在较早的步骤中,该函数调用返回了另一个函数。该函数可以访问传递给外部函数的logger参数。这是关闭的示例。
当您使用字符串呼叫尖叫时。调用返回的函数,该函数以大写字母加!!!记录消息。
如果您的编程经验有限,那么可能需要一些时间才能了解此处的情况。阅读有关高阶函数,词法范围,闭包的信息。