JavaScript:while循环中的for循环

时间:2016-03-31 02:59:14

标签: javascript for-loop while-loop

var hash = "";
var count = 1;
var n = 3;
    for (var pound = 1; pound <=7; pound ++)
        {while (hash.length != count)
            hash += "#";
            hash += "\n";
            count += n;
            n ++;}
         console.log(hash);

嗨,我是Javascript的新手,对于一般的编码也相当新。我花了几个小时分析上面的代码。顺便说一句,我没有任何帮助就自己生成了我不会说我很自豪,因为我不知道为什么或如何运作。我想我得到了工作背后的基本数学,当我在最后检查变量的值时,结果与我的计算相符。但我不确切知道会发生什么。它使用'#'生成一个三角形。我已经尝试删除For循环以查看while循环正在做什么,但我无法得到它的挂起。请看一下。

首先,在第一个For循环中并进入while循环,hash.length的值为0.将它与计数比较为1,它们不匹配,因此下一行。在添加“#”和“\ n”之后,hash.length变为2.但是代码被读取到最后,使得var count现在为4,var n也等于4。

现在,下一个循环不会发生在while循环中,我自己也试过了。它可以追溯到For循环。检查“hash.length!= count”的条件,这个条件仍然保持为hash.length为2并且count现在为4.因为它们不相等,所以不应该重复,然后再返回For循环?

3 个答案:

答案 0 :(得分:2)

while (cond)
  statement1;
  statement2;

没有按照你的想法行事(并且缩进对你而言)。将代码重新格式化为逻辑流,可以实现以下目的:

var hash = "";
var count = 1;
var n = 3;
for (var pound = 1; pound <= 7; pound++) {
  while (hash.length != count)
    hash += "#";
  hash += "\n";
  count += n;
  n++;
}
console.log(hash);

虽然只重复下一个陈述。如果需要重复更多,则必须使用花括号使用复合语句(语句块)。

这里,for循环每行一次;在此范围内,while将为每个哈希字符设置一次。

答案 1 :(得分:0)

任何没有括号{ <-code here-> }的循环只会循环查看以下行。

所以你只做这件事:

while (hash.length != count)
    hash += "#";

因此,删除你的for循环,你将有hash =“#”(因为count从1开始,hash.length为0),然后会发生以下情况:

hash += "\n";
count += n;
n++;

基本上,哈希将是#换行符。

答案 2 :(得分:0)

你的问题的答案是 因为while循环没有括号来指示循环内的代码。 只有一行,中  hash += "#";
 获取执行,当你到达修改计数值的行时:
 count += n;,因为你已经退出那个循环,所以while循环不会重复 通常,您希望保持代码尽可能简单。 你可以通过这样的方式得到与你发布的代码相同的结果:

   var hash="";
   for (var pound = 1; pound <=7; pound ++)
        {
            hash += "#";
            console.log(hash);            
         }

你将使用更少的变量,哈希的长度将大大减少。 有时太多字符串连接会降低代码执行速度。

上面的代码执行了七次for循环,每次都附加一个&#39;#&#39;到哈希字符串并在控制台上显示它...
相同的结果,更少的线条,更快的执行,更容易阅读。

如果您不熟悉编程,我建议您先从编程语言开始,鼓励良好的编程习惯。

虽然 PASCAL 不再受欢迎,但在任何C风格的语言之前首先学习它,很可能会让你起来并编写非常好的代码。

我知道Pascal haters可能会批评..但是,这种语言很适合让你专注于算法和良好的编程风格。这应该是你跳入任何语言之前的第一步。