用while循环循环一个三角形

时间:2016-11-10 16:41:11

标签: javascript loops

我正在阅读Eloquent Javascript书。 有一个任务是建立一个这样的三角形:

let seconds = restCount % 60
let minutes = (restCount / 60) % 60
let result = "\(minutes):\(seconds)"
print(result)
带循环的

我使用for循环成功完成了。

#
##
###
####
#####
######
#######

但出于某种原因,我不能用while循环来做。

for (var result = "#"; result.length <=7; result = result + "#")
console.log(result);

出于某种原因,我在底部添加了这个额外的行,8#符号用引号括起来。为什么会这样?

4 个答案:

答案 0 :(得分:4)

这是代码中最终表达式的结果。在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

答案 1 :(得分:2)

我看到了两个解决方案 出于某些原因,我更喜欢这个

var newItem = '';
for (var number = 0; number < 7; number++){
    console.log(newItem = newItem + '#');
}

但第二个更有说服力

for (var newItem = '#'; newItem.length < 7; newItem = newItem + '#') {
  console.log(newItem);
}

答案 2 :(得分:0)

$("#myimg").attr("src","data:image/png;base64,"+yourData);

代码工作正常。

答案 3 :(得分:0)

实际上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()