【问题标题】:looping a triangle with a while loop用while循环循环一个三角形
【发布时间】:2016-11-10 16:41:10
【问题描述】:

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

【问题讨论】:

  • while循环后有代码吗?
  • 有没有机会直接从浏览器控制台运行它?
  • 因为在最后一次检查循环条件时,结果的长度为 7,然后你再次遍历循环。

标签: javascript loops


【解决方案1】:

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

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

      【解决方案3】:

      var result = "#"
      while(result.length <=7 ){
      console.log(result);
      result = result + "#";
      }

      代码运行良好。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-21
          • 2011-11-04
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 2019-07-11
          相关资源
          最近更新 更多