Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我有一个我不知道的无循环func问题';I don’我不知道该怎么解决,也不知道该不该费心解决_Javascript_Reactjs_For Loop - Fatal编程技术网

Javascript 我有一个我不知道的无循环func问题';I don’我不知道该怎么解决,也不知道该不该费心解决

Javascript 我有一个我不知道的无循环func问题';I don’我不知道该怎么解决,也不知道该不该费心解决,javascript,reactjs,for-loop,Javascript,Reactjs,For Loop,目前,这并没有破坏我的代码中的任何东西,但我一直看到这是一个通常会导致严重问题的错误,但我不知道到底发生了什么,也不知道如何消除错误。如果有人有什么建议,那就太好了 错误:在循环中声明的函数包含对变量“i”的不安全引用no loop func 相关代码段: let i = 0; let interval = moment() .day(days[0] + frequency * i) .toDate(); while (mome

目前,这并没有破坏我的代码中的任何东西,但我一直看到这是一个通常会导致严重问题的错误,但我不知道到底发生了什么,也不知道如何消除错误。如果有人有什么建议,那就太好了

错误:
在循环中声明的函数包含对变量“i”的不安全引用no loop func

相关代码段:

      let i = 0;
      let interval = moment()
        .day(days[0] + frequency * i)
        .toDate();
      while (moment(endDate).isAfter(interval)) {
        days.map((day) =>
          selectedDays.push(
            moment()
              .day(day + frequency * i)
              .toDate()
          )
        );

        interval = moment()
          .day(days[0] + frequency * ++i)
          .toDate();
      }

之所以发生这种情况,是因为您在while循环外部声明
interval
,然后在while循环内部修改它。这可能导致意外行为。您可以在顶部的while循环内声明
interval
,它可能会解决您看到的错误/警告。

之所以发生这种情况,是因为您在while循环外声明
interval
,然后在while循环内修改它。这可能导致意外行为。您可以在顶部的while循环中声明
interval
,它可能会解决您看到的错误/警告。

按照警告:

循环中声明的函数包含对变量“i”的不安全引用

由于while循环只有一个函数声明(每次迭代),我们可以假设以下代码是问题所在:

在中引用
i
会触发警告,因为JavaScript linter不知道何时/何处调用声明的函数

查看规则示例时:

您可以看到,可以通过使用块作用域变量来解决此警告。应用于当前代码时,它可能如下所示:

while (moment(endDate).isAfter(interval)) {
  // store the value used by the function in a block-scoped constant
  const period = frequency * i;
  days.map((day) =>
    selectedDays.push(
      moment()
        .day(day + period)
        .toDate()
    )
  );
  // ...
}
如果不打算使用返回值,还应避免使用。仅用于迭代或循环

另一个选项是根本不声明函数,这可以通过使用for…of来实现

while (moment(endDate).isAfter(interval)) {
  for (const day of days) {
    selectedDays.push(
      moment()
        .day(day + frequency * i)
        .toDate()
    );
  }
  // ...
}
上述操作将完全删除函数声明。

继续警告:

循环中声明的函数包含对变量“i”的不安全引用

由于while循环只有一个函数声明(每次迭代),我们可以假设以下代码是问题所在:

在中引用
i
会触发警告,因为JavaScript linter不知道何时/何处调用声明的函数

查看规则示例时:

您可以看到,可以通过使用块作用域变量来解决此警告。应用于当前代码时,它可能如下所示:

while (moment(endDate).isAfter(interval)) {
  // store the value used by the function in a block-scoped constant
  const period = frequency * i;
  days.map((day) =>
    selectedDays.push(
      moment()
        .day(day + period)
        .toDate()
    )
  );
  // ...
}
如果不打算使用返回值,还应避免使用。仅用于迭代或循环

另一个选项是根本不声明函数,这可以通过使用for…of来实现

while (moment(endDate).isAfter(interval)) {
  for (const day of days) {
    selectedDays.push(
      moment()
        .day(day + frequency * i)
        .toDate()
    );
  }
  // ...
}
上面完全删除了函数声明