解释 "you can have functions that change other functions"
Explain "you can have functions that change other functions"
我正在通读 Eloquent JavaScript,当我在第 5 章看到这个时。:
you can have functions that create new functions.
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
And you can have functions that change other functions.
function noisy(f) {
return function(arg) {
console.log("calling with", arg);
var val = f(arg);
console.log("called with", arg, "- got", val);
return val;
};
}
noisy(Boolean)(0);
//->calling with 0
//->called with 0 - got false
我的问题是:
- 以上两个例子有何不同?
- noisy如何改变Boolean?
How are the above two examples different?
greaterThan
接受一个参数,n
,它是一个数字。
noisy
接受一个参数,f
,它是一个函数,然后可以在其中调用。
其中 greaterThan
只计算一个数字,noisy
更灵活,因为它可以接受任何函数并执行它。
How does noisy change Boolean?
noisy
returns 一个匿名函数,它在将结果存储在名为 val
.
的行中计算 Boolean
不同之处在于 noisy
的参数是另一个函数,而不是像数字那样的 "plain" 值。所以,是的,它创建了一个新的匿名函数,就像 greaterThan
所做的那样,但它是对修改其行为的现有函数的包装。
在这种情况下,包装器只是在调用原始函数之前和之后记录一些消息 f
。但是你可以做其他的事情,比如修改它的参数或者它的 return 值。例如,您可以实现 partial function application,它允许您在程序中的某个位置为函数调用提供 一些 参数,并在 "remember" 中提供这些参数一个新函数,稍后只接受剩余的参数。
我正在通读 Eloquent JavaScript,当我在第 5 章看到这个时。:
you can have functions that create new functions.
function greaterThan(n) { return function(m) { return m > n; }; } var greaterThan10 = greaterThan(10);
And you can have functions that change other functions.
function noisy(f) { return function(arg) { console.log("calling with", arg); var val = f(arg); console.log("called with", arg, "- got", val); return val; }; } noisy(Boolean)(0); //->calling with 0 //->called with 0 - got false
我的问题是:
- 以上两个例子有何不同?
- noisy如何改变Boolean?
How are the above two examples different?
greaterThan
接受一个参数,n
,它是一个数字。
noisy
接受一个参数,f
,它是一个函数,然后可以在其中调用。
其中 greaterThan
只计算一个数字,noisy
更灵活,因为它可以接受任何函数并执行它。
How does noisy change Boolean?
noisy
returns 一个匿名函数,它在将结果存储在名为 val
.
Boolean
不同之处在于 noisy
的参数是另一个函数,而不是像数字那样的 "plain" 值。所以,是的,它创建了一个新的匿名函数,就像 greaterThan
所做的那样,但它是对修改其行为的现有函数的包装。
在这种情况下,包装器只是在调用原始函数之前和之后记录一些消息 f
。但是你可以做其他的事情,比如修改它的参数或者它的 return 值。例如,您可以实现 partial function application,它允许您在程序中的某个位置为函数调用提供 一些 参数,并在 "remember" 中提供这些参数一个新函数,稍后只接受剩余的参数。