2

这是我正在努力的示例代码:

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

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

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

4

5 回答 5

4

在行中:

var greaterThanTen = greaterThan(10);

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

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

所以当你这样做时:

greaterThanTen(9);  #y = 9

您正在调用:

return 9 > 10;
于 2011-10-08T14:10:35.830 回答
4

这个函数不调用函数,它返回一个函数。

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

lambda 演算中,这种绑定称为currying

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

所以,当你打电话时:

var greaterThanTen = greaterThan(10);

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

因此:

greaterThanTen(9);

将返回false

于 2011-10-08T14:11:42.033 回答
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,这是错误的。

于 2011-10-08T14:13:13.113 回答
2

GreaterThan唯一要做的就是为x in设置一个值

函数(y){返回(y>x);}

并将生成的函数存储在变量名中,在本例中为GreaterThanTen,现在包含内容

函数(y){返回(y>10);}

调用GreaterThanTen(9)与查看相同

函数(y = 9){返回(y>10);}

这与

函数(y = 9){返回(9>10);}

这是错误的。因此返回false

编辑:

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

合十礼

于 2011-10-08T14:14:04.793 回答
0

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

于 2011-10-08T14:10:46.807 回答