繁体   English   中英

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

[英]for loops, console.log, return, undefined and scope

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

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

返回一个数组。

 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尝试此repl.it ,只需编写:

countdown(10)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM