for循环,console.log,返回,未定义和作用域

时间:2019-02-14 11:15:15

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

为这个初学者的问题表示歉意,但我在这里发布此方法是作为最后的尝试,以试图了解它的实际工作原理。我的问题是我必须使用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并且不想打印未定义,所以我应该使用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关键字来返回迭代倒数?这纯粹是出于我的理解,而不是针对任何特定功能。非常感谢和抱歉,我对此感到困惑。

2 个答案:

答案 0 :(得分:2)

  

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

您可以使用生成器获得迭代返回,但是每次迭代都必须DOMINIO=filenetvers DATAORA_ATTUALI=$(date +"%Y.%m.%d") GGZIP=1 GGRM=90 find /work/pr-${DOMINIO}-0[0-2]/servers -name "*.log*[^gz]" -type f -user bea -mtime +${GGZIP} -exec /usr/bin/gzip -9 -f {} "*.gz.$DATAORA_ATTUALI" \; find /work/pr-${DOMINIO}-0[0-2]/servers -name "*.stdout*[^gz]" -type f -user bea -mtime +${GGZIP} -exec /usr/bin/gzip -9 -f {} "*.gz.$DATAORA_ATTUALI" \; find /work/pr-${DOMINIO}-0[0-2]/servers -name "*.stderr*[^gz]" -type f -user bea -mtime +${GGZIP} -exec /usr/bin/gzip -9 -f {} "*.gz.$DATAORA_ATTUALI" \; 而不是最后使用yield

return

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

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

答案 1 :(得分:0)

返回数组。

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)

,它将自动打印返回的数组。