我正在阅读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#符号用引号括起来。为什么会这样?
答案 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()