没有子功能中的返回声明?[JavaScript]



我在第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());

,因为您的子函数会影响您的全局景观变量 - 结果和最终,函数返回结果变量..此示例显示您可以将全局变量更改为子功能。

最新更新