首先 - 在这里使用Javascript的n00b,我确实尝试搜索代表类似概念的东西,如下所示,但是我找不到任何有用的东西......如果我的搜索技能相当有限,那么就无法接受。
我正在阅读Eloquent Javascript并在“嵌套范围”部分下面,有一些代码显示了函数的工作范围;以下是代码(还有一点我已经添加到实验中)
var landscape = function() {
var result = "";
var flat = function(size) {
for (var count = 0; count < size; count++)
result += "_";
};
var mountain = function(size) {
result += "/";
for (var count = 0; count < size; count++)
result += "'";
result += "\\";
};
// my nonsensical code -- begin
var myfunc = function(text) {
console.log("this is only a block of text -", text);
};
// my non sensical code -- end
flat(3);
mountain(4);
flat(6);
mountain(1);
flat(1);
// this is what I was trying to do and see what happens here..
mountain = myfunc("meh");
// end of my nonsense
return result;
};
console.log(landscape());
我理解如果在我的函数(myfunc
)中,如果我将值赋给result
,那么当在最后一行返回result
时,它将被覆盖的任何值都是在myfunc
我的问题在这里我想是能够将一个函数变量分配给另一个函数变量(mountain = myfunc
)真正意味着什么?这个“特征”是否真的存在?如果没有,为什么Javascript允许这样的分配?
答案 0 :(得分:0)
这一行:
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(和许多其他语言),您可以获得&#34;的好处&#34; (我把它放在引号中,因为它在某些情况下是有争议的)函数产生副作用(即,改变函数之外的其他值)。因此,如果函数的目的是副作用,您可能不需要返回任何内容。
查找&#34;功能编程&#34;如果你对一点理论感兴趣。
答案 1 :(得分:0)
下面:
mountain = myfunc("meh");
您以myfunc
为参数调用"meh"
并将其返回值指定给mountain
。 function
记录文本并完成。由于它没有return
语句,因此会返回undefined
,因此mountain
会在当天结束时保留undefined
。如果,而不是那样,你这样做:
mountain = myfunc;
然后将名为myfunc
的函数分配给mountain
,因此,如果您在此操作后调用mountain
,它将执行myfunc
。
我的问题在这里我想是能够做到的真正含义 将一个函数变量分配给另一个(mountain = myfunc)并且是 这样一个“功能”真的有用吗?如果没有,为什么呢 Javascript允许这样的分配吗?
这意味着您可以将函数存储在变量中。这是一个非常有用的功能,您最初定义landscape
,myfunc
和mountain
时自己使用它。基本上,function
可以具有属性,因此对于持有function
的变量,您可以做一些可能性。