在我的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()(以及为什么这样更好)