我目前正在阅读Eloquent Javascript第5章。他们给出了以下让我感到困惑的例子。
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true
任何人都可以尽可能简单地将这一点告诉我。回调很麻烦。特别是在遇到这样的情况时。
答案 0 :(得分:7)
高阶函数基本上意味着两件事:
这就是高阶函数的意思。
// this function takes a function as an argument
function myFunc(anotherFunc) {
// executes and returns its result as the output which happens to be a function (myFunc)
return anotherFunc();
}
// let's call myFunc with an anonymous function
myFunc(function() {
// this returns a function as you see
return myFunc;
});
至于你的例子,它通过返回一个函数来演示高阶函数。它还证明了封闭的概念。
Closure正在关闭一个范围变量,在本例中是输入参数n。
function greaterThan(n) {
// n is closed over (embedded into and accessible within) the function returned below
return function(m) { return m > n; };
}
// greatherThan10 reference points to the function returned by the greaterThan function
// with n set to 10
// Notice how greaterThan10 can reference the n variable and no-one else can
// this is a closure
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true
答案 1 :(得分:6)
这里没有涉及“回调”。你使用“greaterThan”函数得到的是一个返回另一个函数的函数。
所以,你调用函数:
var greaterThan10 = greaterThan(10);
现在变量“greaterThan10”引用以10
为参数调用的“greaterThan”函数返回的函数。
然后,记录调用该函数的结果:
console.log(greaterThan10(11));
调用从“greaterThan”返回的函数。它将其参数与创建时传递的参数“n”的值进行比较。由于11
实际上大于10
,因此该函数将返回true
,这就是要记录的内容。