JavaScript 为什么在函数中返回函数?

cod*_*key 9 javascript function

var favoriteColor = "blue";
function colorGenerator(color) {
    return function () { return color; };
}
var getColor = colorGenerator(favoriteColor);
Run Code Online (Sandbox Code Playgroud)

为什么 getColor 不是蓝色。getColor() 是蓝色的。getColor 也变成了一个函数?因为我们在 colorGenerator 中返回了一个函数?

我对这些感到困惑。感谢您的帮助。

Seb*_*iel 5

Javascript 具有一流的函数,这意味着函数可以像任何其他参数或变量一样传递,您甚至可以返回函数 - 根据您的示例。

当你调用getColor 时,你会得到一个函数,因为它就是这样(colorGenerator 返回一个函数)。

当您调用getColor() 时,您正在执行该函数,并获取字符串返回值“blue”;

深入一点,在您的特定情况下,colorGenerator实际上是一个身份生成器。在函数式编程中,身份只是一个返回其原始输入的函数。它在函数式编程中很有用,即组合。

您是否正在尝试使用函数式风格尚不清楚,所以我会强烈推荐这本免费的在线书籍主要是函数式编程指南 它很容易消化,涵盖了从新手到专业人士的所有问题。如果你想更进一步,我会继续阅读Javascript Allongé,这是另一本涵盖函数式编程的免费 JavaScript 书籍。


gue*_*314 5

JavaScript 为什么在函数中返回函数?

在函数中返回函数的一个可能目的是创建一个可以按顺序或按索引调用的函数引用队列

var favoriteColors = ["blue", "red", "green", "orange", "brown"],
  queue = [];

function colorGenerator(color) {
  return function() {
    return color;
  };
}
favoriteColors.forEach(function(favoriteColor, key) {
  var getColor = colorGenerator(favoriteColor);
  queue[key] = getColor
});

for (var i = 0; i < queue.length; i++) {
  var div = document.createElement("div");
  div.textContent = i;
  // call function at index `i` of `queue` array
  div.style.color = queue[i](); 
  document.body.appendChild(div)
}
Run Code Online (Sandbox Code Playgroud)