将结果变量保留在for循环之外(Javascript)的区别是什么?

what is the difference between keeping result variable outside the for loop (Javascript)?

本文关键字:Javascript 区别 是什么 变量 结果 保留 循环 for      更新时间:2023-09-26

我试图理解这两种循环编写方式的区别。这两个代码片段的结果是不同的。为什么?

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

    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循环:输出变量在循环外,给出不同的结果。

    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);
    }
    

在这两种情况下,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);
  }
  // ...
}

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