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()
);
}
// ...
}
上面完全删除了函数声明