下面是我正在处理的示例代码:
function greaterThan(x) {
return function(y) {
return y > x;
};
}
var greaterThanTen = greaterThan(10);
show(greaterThanTen(9));
有没有一种方法可以用数学术语或遵循流程或其他什么我不知道为什么10是x,9是y。
在行中:
var greaterThanTen = greaterThan(10);
您将变量x归为值10,然后将函数存储在稍后调用的greaterThanTen变量中。这意味着:
greaterThanTen = function(y) {
return y > 10;
};
所以当你这样做的时候:
greaterThanTen(9); #y = 9
您正在呼叫:
return 9 > 10;
此函数不调用函数,它返回一个函数。
此代码正在创建一个新的一元函数,其中原始二进制(大于(运算符的右侧操作数是预绑定到特定值。
在lambda演算中,这种绑定被称为currying。
在Javascript中,之所以发生绑定,是因为greaterThan
中参数x
的提供值被永久保留在返回的内部函数(或"闭包"(的作用域中。
所以,当你打电话给时
var greaterThanTen = greaterThan(10);
您现在拥有的是一个新的函数(名为greaterThanTen
(,总是将其单个参数与绑定值10进行比较。
因此:
greaterThanTen(9);
将返回CCD_ 4。
- 创建
greaterThan(10)
- 创建函数:
function(y){return y > x}
- return函数
因此,当您调用greaterThan(10)
时,函数会返回一个局部变量x
设置为10的函数。
var greaterThanTen = greaterThan(10)
等于:var greaterThanTen = function(y){return y > 10};
最后,调用greaterThanTen(9)
,等于9 > 10
,后者为false。
greaterThan唯一要做的就是在中为x设置一个值
函数(y({return(y>x(;}
并将生成的函数存储在变量名中,在本例中为greaterThanTen,现在内容为
函数(y({return(y>10(;}
调用greaterThanTen(9(与查看相同
函数(y=9({返回(y>10(;}
与相同
函数(y=9({返回(9>10(;}
这是错误的。因此返回false。
编辑:
在此处返回函数的函数示例:https://i.stack.imgur.com/3iKQA.jpg(x和y在y>x中切换(
Namaste
greaterThanTen
变量表示一个函数,该函数接受一个参数并返回布尔值,无论该参数是否大于10。