子功能中没有退货声明? [使用Javascript]

时间:2017-12-04 11:27:30

标签: javascript function return

我在第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语句添加到子函数中。我发现它要么会过早地终止子函数,要么产生与从未出现过相同的结果。

感谢阅读。

2 个答案:

答案 0 :(得分:2)

他们正在访问外部作用域变量result并在那里进行更改。因此,他们会更改实际result变量的值,并且不需要返回任何内容。如果它到达函数的末尾,则函数结束。您可以通过创建本地函数范围变量并从中创建字符串,返回它们并在主landscape函数中连接来完成相同的操作。

使用return语句

查看代码的替代方法

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

因为你的子函数会影响你的全局格局变量 - 结果,最后是函数返回结果变量。这个例子告诉你可以将全局变量改为子函数。