我在第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());
// → ___/''''\______/'\_
即使在阅读了不同来源的不同定义之后,也许我遗漏了一些关于return语句目的的基本信息。
我尝试将return语句添加到子函数中。我发现它要么会过早地终止子函数,要么产生与从未出现过相同的结果。
感谢阅读。
答案 0 :(得分:2)
他们正在访问外部作用域变量result
并在那里进行更改。因此,他们会更改实际result
变量的值,并且不需要返回任何内容。如果它到达函数的末尾,则函数结束。您可以通过创建本地函数范围变量并从中创建字符串,返回它们并在主landscape
函数中连接来完成相同的操作。
使用return语句
查看代码的替代方法
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());
&#13;
答案 1 :(得分:0)
因为你的子函数会影响你的全局格局变量 - 结果,最后是函数返回结果变量。这个例子告诉你可以将全局变量改为子函数。