javascript - 在柯里化(Currying)中,为什么外部的启动函数看起来是最内部的函数?

标签 javascript currying

在下面的简单 2 层柯里化(Currying)示例中,单词“dog”被传递到 y 参数中。

"use strict";

function layer2(x) {
    return function(y) {
        return console.log(x, y);
    }
}

var layer1 = layer2('cat');

layer1('dog');

我知道它是这样工作的,并且我可以可靠地重现它。但是我无法理解其工作原理。如果我制作了一个 100 层的示例,第 1 层将是最里面的函数,并且图案将从该点向外工作。是什么基 native 制导致了这种情况?非常感谢您的任何意见!

最佳答案

简而言之,词法作用域使这成为可能。请参阅,示例中的 layer2 函数返回另一个函数,该函数在其作用域中具有两个变量:

y - its own argument
x - parameter passed into `layer2` function

这里的关键点是,一旦存储了返回的函数,x 值就被设置并且永远不会改变。同样,就您的示例而言,存储在 layer1 变量中的函数 - layer2('cat') 的结果 - 将 x 名称绑定(bind)到 ' cat' 字符串值。

关于javascript - 在柯里化(Currying)中,为什么外部的启动函数看起来是最内部的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47936053/

相关文章:

javascript - 将关闭和打开功能绑定(bind)到所有对话框

php - 如何使 AJAX 使用 POST 而不是 GET

programming-languages - Scheme 中 Curried 函数的实现

swift - 将常规 Swift 函数转换为 Curry 函数

c++ - 返回捕获局部变量的 lambda

f# - 如何在 F# 类型提供程序中构建任意柯里化(Currying)函数?

javascript - Sweet.js 表达式到字符串文字

javascript - `appendTo()` 在哪里可以与 `htmlString` 一起使用?

javascript - 在 Jquery I18N 插件中指定 'path' 的正确方法是什么?

Scala Currying 和函数字面量