[英]looping a triangle with a while loop
我正在阅读 Eloquent Javascript 书。 有一个任务来构建一个像这样的三角形:
#
##
###
####
#####
######
#######
有一个循环。
我用for循环成功地做到了。
for (var result = "#"; result.length <=7; result = result + "#")
console.log(result);
但由于某种原因,我不能用 while 循环来做到这一点。
var result = "#"
while(result.length <=7 ){
console.log(result);
result = result + "#";
}
VM920:3 #
VM920:3 ##
VM920:3 ###
VM920:3 ####
VM920:3 #####
VM920:3 ######
VM920:3 #######
"########"
出于某种原因,我在底部得到了这条额外的行,其中有 8 个 # 符号用引号括起来。 为什么会这样?
这是代码中最终表达式的结果。 在你的 JS 控制台中输入“5+5”,你会得到一个结果。 如果你把“5+5”放在脚本的末尾,同样的事情。 这就是这里发生的事情:
var result = "#"
while(result.length <=7 ){
console.log(result);
result = result + "#"; // <-- this is the last statement executed, so it is returned
}
相比之下,下面的最后一条语句是一个日志语句,它没有返回值。 所以脚本的结果是undefined
。
for (var result = "#"; result.length <=7; result = result + "#")
console.log(result);
如果你尝试这样的事情,你可以更清楚地看到这一点:
for (var i=0; i < 5; i++) {
console.log(i);
i
}
在这里,最后一个表达式就是i
。 此代码打印 0-4 (含)的每个数字,然后再次打印 4,因为它是最终表达式。
0
1
2
3
4 <-- the final console.log() call
4 <-- the final expression
我看到了两种解决方案出于某些原因,我更喜欢这个
var newItem = '';
for (var number = 0; number < 7; number++){
console.log(newItem = newItem + '#');
}
但第二个更雄辩
for (var newItem = '#'; newItem.length < 7; newItem = newItem + '#') {
console.log(newItem);
}
var result = "#" while(result.length <=7 ){ console.log(result); result = result + "#"; }
代码工作正常。
实际上 javascript 引擎需要通知一个函数已经完成它的任务。 在这种情况下,编程语言的理解不是已finished
,而是has finished
。 主要的事实是它不仅适用于 javascript,也适用于其他语言。 在 C# 等某些语言中,我们使用方法签名来调用它,例如,
public void ReturnNothind(){
// Code...
}
当它需要通知它已经完成它的业务时,该方法返回void
。
在 javascript 的情况下,它没有在方法签名中声明,但它根据这个原理工作。
在for loop
的情况下,它返回undefined
。 另一方面,对于while
循环,它通过返回result
变量的值通知 js 引擎。
因此,要从 while 循环中获得相同的结果,您可以执行以下操作...
function print(){var result = "#"
while(result.length <=7 ){
console.log(result);
result = result + "#";
}}
print()
这是我个人最喜欢回答这个问题的方式;
let i = 0;
let finalValue = "";
while(i < 8) {
finalValue += "#"; i++
console.log(finalValue);
}
但也有这个解决方案;
let i = 0;
while(i < 8) {
let finalValue = ""; i++
let j = 0;
while (j < i+1) {
finalValue += "#"; j++
console.log(finalValue);
}
}
希望这可以帮助 :}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.