我如何理解返回函数的函数?

时间:2011-10-08 14:07:40

标签: javascript return-value return-type currying program-flow

以下是我正在努力解决的示例代码:

function greaterThan(x) {
  return function(y) {
    return y > x;
  };
}

var greaterThanTen = greaterThan(10);
show(greaterThanTen(9));

有没有办法用数学术语或遵循流程或其他东西? 我不知道为什么10是x而9是y。

5 个答案:

答案 0 :(得分:4)

在行中:

var greaterThanTen = greaterThan(10);

您正在将变量x赋值为10,然后将该函数存储在稍后要调用的greaterThanTen变量中。这意味着:

greaterThanTen = function(y) {
    return y > 10;
};

所以当你这样做时:

greaterThanTen(9);  #y = 9

您正在致电:

return 9 > 10;

答案 1 :(得分:4)

此函数不调用函数,返回函数。

此代码正在创建一个新的一元函数,其中原始二进制(大于)运算符的右侧操作数预绑定到特定的值。

lambda calculus中,此约束称为currying

在Javascript中发生绑定是因为x中参数greaterThan的提供值永久保留在返回的内部函数(或“闭包”)的范围内。

所以,当你打电话:

var greaterThanTen = greaterThan(10);

您现在拥有的是一个 new 函数(名为greaterThanTen),始终将其单个参数与绑定值10进行比较。

因此:

greaterThanTen(9);

将返回false

答案 2 :(得分:2)

  • 创建greaterThan(10)
  • 创建功能:
    function(y){return y > x}
  • 返回功能。

因此,当您调用greaterThan(10)时,该函数返回一个局部变量x设置为10的函数。

var greaterThanTen = greaterThan(10)等于:
var greaterThanTen = function(y){return y > 10};

要完成,调用greaterThanTen(9),等于9 > 10,这是假的。

答案 3 :(得分:2)

greaterThan 唯一能做的就是在

中设置 x 的值
  

function(y){return(y> x);}

并将结果函数存储在变量名称中,在本例中为 greaterThanTen ,现在包含内容

  

function(y){return(y> 10);}

拨打 greaterThanTen(9)与查看相同

  

function(y = 9){return(y> 10);}

相同
  

function(y = 9){return(9> 10);}

这是假的。因此返回 false

修改

在此返回函数的函数示例:http://i.imgur.com/aiHSH.jpg(x和y在y> x中切换)

合十

答案 4 :(得分:0)

greaterThanTen变量表示一个函数接受一个参数并返回一个布尔值,无论该参数是否大于10。