在循环内重置变量

时间:2019-05-07 13:18:25

标签: javascript google-apps-script

很抱歉这个问题的根本性,但我找不到确切的答案。

我有一些代码依赖于重新声明来重置变量,但似乎无法正常工作。煮了我有

for (i=0; i<5; i++){
  var j;
  j += i
}

显然毫无意义的代码,但是我虽然j在每个循环中都会被重置,但是它只是被跳过了。还有另一种方法吗?还是我只需要将其分配为null

欢呼

2 个答案:

答案 0 :(得分:1)

您的代码有很多问题。

for (i=0; i<5; i++) {
  var j;
  j += i
}
  1. jfor循环的局部变量,因此您将无法在循环外使用其值,
  2. j尚未初始化,因此NaN += i将导致NaN

将您的代码更改为以下内容:

var j = 0; // declare the variable outside of the loop and give it an initial value
for (i=0; i<5; i++) {
  j += i;
}
// use j's value somewhere else
var x = j;

答案 1 :(得分:0)

如Chris G所述,您的示例实际上并不适用,因为该值始终为NaN。在不分配值的情况下声明变量将始终使其undefined

function test() {
  var j;
  Logger.log(j); // undefined
}

如果您分配一个值,即使该值为null,也可以。 (JS会将null解释为零...您可以阅读更多here。)

function test() {
  for (var i = 0; i < 5; i++){
    var j = null;
    j = j + i; // Explicitly writing to j
    Logger.log(j); // 0.0, 1.0, 2.0, 3.0, 4.0
    Logger.log(j += i); // 0.0, 1.0, 2.0, 3.0, 4.0
  }
}

如Keith所述,您也可以使用const。那将声明一个常量值,因此不需要重置,但是您也将无法操作它。

function test() {
  const j = null;
  for (var i = 0; i < 5; i++){
    j = j + i; // Explicitly writing to j
    Logger.log(j); // null, null, null, null, null
    Logger.log(j += i); // 0.0, 1.0, 2.0, 3.0, 4.0
  }
}

很遗憾,您不能在Google Apps脚本中使用let