Javascript 将函数变量赋值给另一个函数

Javascript 将函数变量赋值给另一个函数,javascript,Javascript,首先是n00b和Javascript,我试着搜索一些与下面的概念相似的东西,但是我找不到任何有用的东西。如果我的搜索技能有限,我很抱歉 我正在浏览雄辩的Javascript,在“嵌套作用域”一节中,有一些代码显示了函数的作用域是如何工作的;下面是代码(以及我在实验中添加的一些代码) var横向=函数(){ var结果=”; var flat=函数(大小){ 对于(变量计数=0;计数

首先是n00b和Javascript,我试着搜索一些与下面的概念相似的东西,但是我找不到任何有用的东西。如果我的搜索技能有限,我很抱歉

我正在浏览雄辩的Javascript,在“嵌套作用域”一节中,有一些代码显示了函数的作用域是如何工作的;下面是代码(以及我在实验中添加的一些代码)

var横向=函数(){
var结果=”;
var flat=函数(大小){
对于(变量计数=0;计数<大小;计数++)
结果+=”;
};
var=功能(大小){
结果+=“/”;
对于(变量计数=0;计数<大小;计数++)
结果+=“'”;
结果+=“\\”;
};
//我的荒谬代码——开始
var myfunc=函数(文本){
log(“这只是一个文本块-”,text);
};
//我的非感官代码——结束
单位(3);;
山区(4);
公寓(6);
山区(1);
单位(1);;
//这就是我想做的,看看这里发生了什么。。
山区=myfunc(“meh”);
//结束我的胡说八道
返回结果;
};
log(横向());
我知道,如果在我的函数(
myfunc
)中,我给
result
赋值,那么当在最后一行返回
result
时,它将被
myfunc
中分配给它的任何值覆盖

我想这里的问题是,能够将一个函数变量分配给另一个(
mountain=myfunc
)到底意味着什么?这种“功能”是否有实际用途?如果没有,为什么Javascript允许这样的分配?

这一行:

mountain = myfunc("meh");
myfunc
的返回值指定给
mountain

由于
myfunc
只记录一些内容,因此它返回
undefined
(当没有给出显式返回值时,这是默认的返回值)

因此,在您给出的示例末尾,
mountain
undefined

但是,当您有返回其他值的函数时,这非常有用。例如:

function add(a, b) {
  return a + b;
}

function multiply(c, d) {
  return c * d;
}

function divide(e, f) {
  return e/f;
}

var multipliedThing = multiply(add(1,2), add(3,4));
var anotherMultipliedThing = multiply(add(5,6), add(7,8))

var result = divide(multiplied, anotherMultipliedThing);
// => 0.12727272727272726
上面的内容有点做作,但它展示了将函数的返回值分配给变量的用例

函数的核心概念是接受一些值并返回一个值。使用JavaScript(和许多其他语言)可以获得函数的“好处”(我在引号中引用了这一点,因为在某些情况下这是有争议的),这些函数会产生副作用(即,在函数之外改变其他值)。因此,如果函数的用途是用于副作用,则可能不需要返回任何内容

如果您对一点理论感兴趣,请查阅“函数式编程”。

此处:

mountain = myfunc("meh");
您正在调用
myfunc
,并将其返回值指定给
mountain
功能
记录文本并完成。由于它没有
return
语句,它返回
undefined
,因此,
mountain
将在一天结束时保持
undefined
。如果不是这样,而是这样做:

mountain = myfunc;
然后名为
myfunc
的函数将分配给
mountain
,因此,如果在此操作后调用
mountain
,它将执行
myfunc

我想我的问题是,能够做到这一点到底意味着什么 将一个函数变量分配给另一个函数变量(mountain=myfunc)并 这种“特性”在现实世界中有什么用法?若否,原因为何 Javascript允许这样的分配吗


这意味着您可以将函数存储在变量中。这是一个非常有用的功能,当您最初定义
景观
myfunc
山脉
时,您可以自己使用它。基本上,
函数
可以有属性,因此,如果变量持有
函数

您没有将函数分配给其他变量,则可以使用大量的可能性。您的代码正在调用函数,由于您的函数不返回任何内容,它将未定义的内容存储到mountain中。由于您没有将函数变量赋值给另一个函数变量,因此您的问题没有真正意义。也许你从书中复制了错误的代码。
mountain = myfunc;