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

JavaScript为什么在函数中返回函数?,javascript,function,Javascript,Function,为什么getColor不是蓝色。getColor()是蓝色的。getColor也成为一个函数?因为我们在colorGenerator中返回了一个函数 我对这些感到困惑。谢谢你的帮助 Javascript具有一流的函数,这意味着函数可以像任何其他参数或变量一样传递,您甚至可以返回函数——正如您的示例所示 当您调用getColor时,您将返回一个函数,因为它就是这个函数(colorGenerator返回一个函数) 调用getColor()时,您正在执行该函数,并获得字符串返回值“blue” 再深入一

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


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

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

当您调用getColor时,您将返回一个函数,因为它就是这个函数(colorGenerator返回一个函数)

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

再深入一点,在您的具体案例中,colorGenerator实际上是一个身份生成器。 在函数式编程中,标识只是返回其原始输入的函数。它在函数式编程(即组合)中很有用

你是否在尝试使用功能性的风格还不清楚,所以我将停止大力推荐这本免费的在线书籍 这是非常容易消化和涵盖的问题,从新手到专业。 如果您想更进一步,我将继续阅读另一本关于函数式编程的免费JavaScript好书。

让我们分析一下:

var favoriteColor = "blue";
function colorGenerator(color) {
    return function () { return color; };
}
var getColor = colorGenerator(favoriteColor);
此方法返回一个
函数
,该函数依次返回一个
颜色
)。这样做:

var favoriteColor = "blue";
function colorGenerator(color) {
    return function () { return color; };
}
表示
getColor
function(){return“blue”}
。因此,要:

var getColor = colorGenerator(favoriteColor);
设置后,返回值为“蓝色”


测试:

var favoriteColor=“蓝色”;
函数颜色生成器(颜色){
返回函数(){return color;};
}
var getColor=颜色生成器(favoriteColor);
document.getElementsByClassName(“foo”)[0].innerHTML=“colorGenerator返回:”+colorGenerator(favoriteColor);
document.getElementsByClassName(“bar”)[0].innerHTML=“getColor返回:”+getColor()

希望此示例能够帮助您理解如何使用返回函数

下面的示例说明如何使用return语句 返回一个函数

JavaScript

getColor();
附言:
返回[(][表达式][)]

可选表达式参数是要从函数返回的值。如果省略,函数不会返回值。
您可以使用return语句停止函数的执行并返回表达式的值。如果忽略表达式,或者函数中没有执行return语句,则调用当前函数的表达式将被指定未定义的值

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

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

var favoriteColors=[“蓝色”、“红色”、“绿色”、“橙色”、“棕色”],
队列=[];
函数颜色生成器(颜色){
返回函数(){
返回颜色;
};
}
forEach(函数(favoriteColor,键){
var getColor=颜色生成器(favoriteColor);
队列[key]=getColor
});
对于(变量i=0;i}
这叫做关闭。基本上,对于该
colorGenerator
函数的每次调用,它的本地变量都将保留在附近,并在它返回的函数调用中表示出来

见此:

function doWork() {
    return function calculate(y) { return y + 1; };
}

var func = doWork();
var x = func(5);
document.write(x);

// Output: 6
我不知道这段代码的上下文,所以为什么您基本上需要一个工厂来生成返回特定颜色名称的函数,我不知道。但这基本上就是它要做的


为了解释为什么这在特定上下文中有用,我们可能需要知道上下文…

大多数时候我们返回function,我们的目标是限制变量范围和保持状态。因此,您的代码应该是:

函数颜色生成器(颜色){
var favoriteColor=color;//此处保留状态
返回函数(c){return c==favoriteColor;};
}
var isorange=颜色发生器(“橙色”)//因为只调用一次colorGenerator,所以函数isorange保持状态:“orange”
isorange('black')//此处返回false
isorange('orange')//此处返回true

colorGenerator
正在返回一个函数。要获取颜色名称,需要调用该函数
getColor()
这是一个博客,它给出了函数返回函数背后的原理:可能是重复的,可能是Hi@Weiting,我已经为其添加了更多详细内容you@Weiting-技术上不,因为
y
是返回函数中的一个参数。调用返回的函数需要提供一个参数。然而,这里的混淆点是,如果在返回函数的函数中没有任何提供的参数或其他局部变量(即,闭包没有使本地数据持久化),那么进行闭包到底有什么意义呢?在一个问题上做一个毫无意义的闭包例子,这个问题基本上是问闭包的意义是什么…这不是很有帮助。。。
function colorGenerator(color) {
    return function () { return color; };
}

// remember these are functions to be called, not the actual color names
var getRed = colorGenerator('red');
var getBlue = colorGenerator('blue');

// now each time we call the returned function of
// each, it will say the color we want
alert( getRed() + " and " + getBlue() ); // -> "red and blue"