【问题标题】:what is the difference between keeping result variable outside the for loop (Javascript)?将结果变量保留在 for 循环(Javascript)之外有什么区别?
【发布时间】:2016-10-05 18:45:46
【问题描述】:

我试图了解这两种编写循环的方式之间的区别。两个代码 sn-ps 的结果是不同的。为什么?

  1. for 循环:output 变量在循环内,给出不同的结果。

    for (var n = 1; n <= 100; n++) {
      var output = "";
      if ( n % 3 == 0)
        output += "Fizz";
      if (n % 5 == 0)
        output += "Buzz";
      console.log(output || n);
    }
    
  2. for 循环:output 变量在循环之外,给出不同的结果。

    var output = "";
    for (var n = 1; n <= 100; n++) {
      if ( n % 3 == 0)
        output += "Fizz";
      if (n % 5 == 0)
        output += "Buzz";
      console.log(output || n);
    }
    

【问题讨论】:

  • 1.如果你有不同的结果,你应该澄清它们。 2.第一种情况output在每次迭代时重新初始化为一个空字符串
  • 这实际上与范围无关,而与初始化有关。
  • var output 这样的变量声明被提升到顶部。 output = "" 之类的作业不是。
  • 您真的想了解不同之处吗?然后展开循环(手动),至少需要 3-4 次迭代。这应该会告诉你不同之处。

标签: javascript variables for-loop


【解决方案1】:

在这两种情况下,output声明 都被视为在循环之外。然而,重要的是output初始化

  var output = "";

将变量设置为空字符串 ("")。如果将初始化放在循环内,则变量的值会在每次迭代开始时被清除。这抹杀了上一次迭代尝试做的所有工作。

因此,假设您的代码出现在某个函数中,第一个示例将被解释为好像它是编写的:

function whatever() {
  var output;
  // ...
  for (var n = 1; n <= 100; n++) {
    output = "";
    if ( n % 3 == 0)
      output += "Fizz";
    if (n % 5 == 0)
      output += "Buzz";
    console.log(output || n);
  }
  // ...
}

显然,在每次迭代开始时将变量设置回"" 会破坏循环的整个点。

【讨论】:

  • 如果在外面做什么呢?
  • @K.Kaur 如果它在循环之外,那么初始化只发生一次,在循环开始之前。
  • 感谢您的理解!
猜你喜欢
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2017-12-25
相关资源
最近更新 更多