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