在循环中声明的函数包含对forEach循环中的no-loop- Function变量的不安全引用 &



在我的React项目中,我有一个简单的.js文件,其中包含以下代码

let oldInfo
function getChanges() {
const newInfo = {};
let keys = ["name", "age", "sex"];
oldInfo = "one";
for (const key in newInfo) {
keys.forEach(subkey => {
if (oldInfo[subkey] === newInfo[key])
console.log(subkey);
});
}
}
getChanges();

它给出了一个no-loop-func警告,尽管我做了很多研究,但无法计算出风险。

Line 9:22:  Function declared in a loop contains unsafe references to variable(s) 'oldInfo'  no-loop-func

风险是什么?我怎样才能解决这个问题?

下面是Eslint Demo编辑器

的警告

"引发此错误以突出显示可能无法工作的代码段正如你所期望的那样,也可能表明对如何进行的误解语言工作

从https://eslint.org/docs/rules/no-loop-func

另外,阅读https://www.albertgao.xyz/2016/08/25/why-not-making-functions-within-a-loop-in-javascript/

在这种特殊情况下,你可以通过在getChanges方法之外定义forEach回调函数来修复它。(命名为logIteration)并像这样修改forEach回调

keys.forEach(logIteration)

为避免此警告(错误),您可以使用for of而不是forEach

let oldInfo;
function getChanges() {
const newInfo = {};
let keys = ["name", "age", "sex"];
oldInfo = "one";
for (const key in newInfo) {
for (let subkey of keys) {
if (oldInfo[subkey] === newInfo[key])
console.log(subkey);
}
}
}
getChanges();

forEach期望一个同步函数

forEach不等待承诺。在使用承诺(或异步函数)作为forEach回调时,请确保您了解其含义。

Quote from Array.prototype.forEach() - JavaScript | MDN

你可以在本页找到很好的解释和例子。

  • React -用for…of替换异步的.forEach()(以及为什么这样更好)

相关内容

  • 没有找到相关文章