了解Javascript中的高阶函数

时间:2014-09-30 23:08:58

标签: javascript callback

我目前正在阅读Eloquent Javascript第5章。他们给出了以下让我感到困惑的例子。

function greaterThan(n) {
  return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true

任何人都可以尽可能简单地将这一点告诉我。回调很麻烦。特别是在遇到这样的情况时。

2 个答案:

答案 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,这就是要记录的内容。