我在第3章中 - 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 += "\";
};
flat(3);
mountain(4);
flat(6);
mountain(1);
flat(1);
return result;
};
console.log(landscape());
// → ___/''''______/'_
也许我缺少关于返回语句目的的根本性,即使在阅读了来自不同来源的不同定义之后。
我尝试在子函数中添加返回语句。我发现它要么是在成熟的终止子功能,要么产生相同的结果,就好像从来没有。
。感谢您的阅读。
他们正在访问外部范围的变量result
并在此处更改某些内容。因此,他们更改了实际的result
变量值,不需要返回任何内容。如果达到函数的末尾,功能结束。您可以通过创建本地函数示波器变量并从它们中制作字符串,将它们返回并在主要landscape
函数中加入来执行相同的操作。
请参阅带有返回语句的代码的替代方案
var landscape = function() {
var result = "";
var flat = function(size) {
var localFlat = ''; // Function scoped variable
for (var count = 0; count < size; count++) {
localFlat += "_";
}
return localFlat; // Return function scoped variable
};
var mountain = function(size) {
var localMountain = "/"; // Function scoped variable
for (var count = 0; count < size; count++) {
localMountain += "'";
}
localMountain += "\";
return localMountain; // Return function scoped variable
};
result = flat(3) + mountain(4) + flat(6) + mountain(1) + flat(1); // Concatenate the results of each function
return result;
};
console.log(landscape());
,因为您的子函数会影响您的全局景观变量 - 结果和最终,函数返回结果变量..此示例显示您可以将全局变量更改为子功能。