for循环,console.log,return,undefined和scope

问题描述 投票:0回答:2

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

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?无论如何,返回最好在这种情况下使用。所以我改变了我的代码,但当然在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关键字的情况下返回迭代倒计时?这纯粹是出于我的理解,而不是任何特定的功能。非常感谢和抱歉我的困惑。

javascript read-eval-print-loop repl.it
2个回答
2
投票

如何在不使用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));

0
投票

返回一个数组。

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

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

countdown(10)

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

© www.soinside.com 2019 - 2024. All rights reserved.