【问题标题】:Javascript function loop variableJavascript函数循环变量
【发布时间】:2020-06-22 14:48:13
【问题描述】:

var i = 99;
while (true)
{
  function lines(him)
  {
    return i + " " + "lines of code in the file " + i + " " + him + i-1 + "lines of code" + "!";
  }
    

  console.log(lines("John strikes one out, clears it all out ;"));
  i -= 1;
  if (i == 0)
  {
    break;
  }
}

我的功能有问题。 另外,如果我的功能不正确,请指导我正确的方向。 当我运行它时,我也收到了NaN 错误( i-1) 我想让它说文件中的 99 行代码 99 行代码 John 删除了一个,清除了文件中的 98 行代码。

新手请温柔点

【问题讨论】:

  • 我觉得你应该把“him+i-1”放在括号里。
  • + him + i-1 + -> + him + (i-1) +
  • @VLAZ 也许更好。我不明白代码应该做什么。
  • isNaN("string" - 1) === true 直到- 的所有内容都被强制转换为字符串并连接起来。
  • @FlatAssembler 它应该打印字符串him,然后在其后面加上数字i-1,例如,对于i = 9,它应该打印8。但是由于在任何地方都没有括号,所以 whole 表达式被计算为i + " " + "lines of code in the file " + i + " " + him + i(产生一个字符串)-> 减去1(产生NaN:它是一个从 a 中减去的数字字符串)-> 连接"lines of code" + "!"

标签: javascript function loops


【解决方案1】:

问题是你正在构建一个字符串,然后尝试从字符串中减去一个。减法(与加法不同)必须产生一个数字,但 "string"-1 不是数字 (NaN)。

修复结构的一种方法是将i-1 放在括号中,以便像这样单独评估:

i + " " + "lines of code in the file " + i + " " + him + (i-1) + "lines of code" + "!"

但更好的语法是使用反引号以更易读的方式对其进行格式化。试试这个:

`${i} lines of code in the file ${i} ${him+(i-1)} lines of code!`

我不太确定该语句的结构,但这遵循了您似乎正在尝试做的事情。在${} 段中使用带有求值的反引号比添加字符串更容易阅读和理解。

为了进一步解释出错的原因,请尝试运行以下 sn-p:

let i = 99
let x = "hello"
console.log("i-1", i - 1)         // Works since i is a number
console.log("x-1", x - 1)         // NaN subtracting from string
console.log("x+i-1", x + i - 1)   // Still NaN since "x+i" is a string
console.log("x+(i-1)", x + (i-1)) // Works since (i-1) is added to the string

【讨论】:

    【解决方案2】:

    var i = 99;
    function lines(him)
    {
       return i + " lines of code in the file " + i + " " + him + --i + " lines of code!";
       
    }
    
    while (true)
    {
       console.log(lines("John strikes one out, clears it all out; "));
       if (!i)
       {
             break;
       }
    }

    这是我设法解决的方法,很长但使用相同的逻辑。

    【讨论】:

      【解决方案3】:

      首先,我建议您使用正确的迭代结构。如何决定哪一个适合您:

      • 如果您知道要进行的迭代次数,我更愿意使用 for 循环。
      • 如果您有一个数组作为输入,您可以使用foreach 迭代器,但我更喜欢for 循环。
      • 如果您必须迭代直到满足某个条件,那么while 是正确的结构。
      • 最后,如果您需要做一件事,然后进行迭代,那么do 结构就是您所需要的。

      在这种情况下,您已经知道要进行多少次迭代,所以我会使用 for 循环:

      for (let i = 0; i < 99; i++) {
          console.log(i + " " + "lines of code in the file " + i + " " + him + i-1 + "lines of code" + "!");
      }
      

      另外,请记住,在您的示例中,您将函数声明行传递了 99 次,您应该避免在循环结构之外声明函数。

      还有一点,您应该始终尽量保持代码的可读性,在您的实际代码中,您想要完成的内容有点难以阅读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-04
        • 2015-06-12
        • 1970-01-01
        • 2011-03-02
        • 2018-10-25
        • 2021-08-11
        相关资源
        最近更新 更多