在 currying 中,为什么外部的启动函数看起来是最里面的函数?
In currying why does the outside, initiating function appear to be the innermost function?
在简单的 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 层将是最内层的功能,并且该模式将从该点向外工作。这是什么基本机制造成的?非常感谢任何输入!
很简单。当您调用 layer2('cat')
时,它将 return 函数:
function(y) {
return console.log(x, y);
}
现在,layer1('dog')
returns 函数调用 return console.log(x,y);
已经在调用 layer2('cat')
中接收到 x,并且正在从 [=15= 调用 y ].
这是一个非常好的阅读博客https://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/,它将进一步帮助您。
简而言之,词法作用域使这成为可能。请参阅示例中的 layer2
函数 returns 另一个在其范围内有两个变量的函数:
y - its own argument
x - parameter passed into `layer2` function
这里的关键点是,一旦您存储了返回的函数,x
值就已设置并且永远不会改变。同样,就您的示例而言,存储在 layer1
变量中的函数 - layer2('cat')
的结果 - 将 x
名称绑定到 'cat' 字符串值。
在简单的 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 层将是最内层的功能,并且该模式将从该点向外工作。这是什么基本机制造成的?非常感谢任何输入!
很简单。当您调用 layer2('cat')
时,它将 return 函数:
function(y) {
return console.log(x, y);
}
现在,layer1('dog')
returns 函数调用 return console.log(x,y);
已经在调用 layer2('cat')
中接收到 x,并且正在从 [=15= 调用 y ].
这是一个非常好的阅读博客https://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/,它将进一步帮助您。
简而言之,词法作用域使这成为可能。请参阅示例中的 layer2
函数 returns 另一个在其范围内有两个变量的函数:
y - its own argument
x - parameter passed into `layer2` function
这里的关键点是,一旦您存储了返回的函数,x
值就已设置并且永远不会改变。同样,就您的示例而言,存储在 layer1
变量中的函数 - layer2('cat')
的结果 - 将 x
名称绑定到 'cat' 字符串值。