【问题标题】:for loops, console.log, return, undefined and scopefor 循环、console.log、return、未定义和范围
【发布时间】:2019-07-08 09:43:52
【问题描述】:

对于这个初学者的问题,我深表歉意,但我将其发布在这里作为最后的手段,试图了解它的实际工作原理。我遇到的问题是我必须使用 repl.it 完成一些练习,其中使用 console.log 打印到控制台返回未定义。例如,如果我在其中运行此代码:

function countdown(num) {
  for (let i = num; i > 0; i--) {
    console.log(i)
  }
};
countdown(10);

打印出来:

10
9
8
7
6
5
4
3
2
1
=> undefined

现在,当我在 VS Code 中运行此代码时,它会产生相同的结果,但底部没有未定义。因为我必须使用 repl.it 并且不想打印 undefined,所以我应该使用 return 对吗?无论如何, return 在这种情况下最好使用。所以我更改了我的代码,但当然在 for 循环代码块中使用 return 会阻止循环运行,这不好。那么我这样做:

function countdown(num){
    let count = 0;
    for (let i = num; i > 0; i--){
        count = i;
    }
    return count;
};
console.log(countdown(10));

但后来我只得到 1 个返回。所以我的问题是,如何在不使用 console.log() 和任何方法以及使用 return 关键字的情况下返回迭代倒计时?这纯粹是为了我的理解,而不是为了任何特定的功能。非常感谢,并为我的困惑提前道歉。

【问题讨论】:

  • 该函数没有return语句,所以默认返回undefinedrepl.it 打印函数的返回值,VS Code 不打印。
  • 我不明白为什么它会打印 undefined - 它不在 sn-p 中(除非您在控制台记录实际功能)
  • @Pete Stack Snippets 不会自动打印语句的值,交互式 REPL 会这样做。
  • 如果你想返回所有的数字,把它们放在一个数组中然后返回。
  • 谢谢@Barmar,明白了!使用添加 return 仍将返回 undefined ,除非我为其分配一些要返回的东西 - 这是有道理的。我想最好的解决方案只是推送到数组,但希望在没有任何方法的情况下做到这一点。

标签: javascript read-eval-print-loop repl.it


【解决方案1】:

如何在不使用 console.log() 和任何方法以及使用 return 关键字的情况下返回迭代倒计时

您可以使用生成器获得迭代返回,但您必须在每次迭代时使用 yield 值,而不是在末尾使用 return

function* countdown(num) {
  for (let i = num; i > 0; i--) {
    yield i;
  }
};
console.log(...countdown(10));

或者你可以创建一个数组并返回它:

function countdown(num) {
  const arr = [];
  for (let i = num; i > 0; i--) {
    arr.push(i);
  }
  return arr;
};
console.log(countdown(10));

【讨论】:

  • 我正要发布这个解决方案。 :P
  • 感谢您的建议 - 我会尝试一下。
【解决方案2】:

返回一个数组。

function countdown(num) {
  let count = [];
  for (let i = num; i > 0; i--) {
    count.push(i);
  }
  return count;
};
console.log(countdown(10));

我在上面使用了console.log(),因为堆栈片段不会自动打印函数调用的值。当您在repl.it 中尝试此操作时,只需写:

countdown(10)

它会自动打印返回的数组。

【讨论】:

  • 只是添加 - 删除 REPL 中的未定义,删除 console.log()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多