Jshint:循环中的匿名函数(问题)
Jshint: Anonmyous function within a loop (Issue)
我的问题类似于JSHint won't let me use 'forEach' in a 'for' loop
我们目前的项目中有大约 2k 行 JS,最近包括 jshint
检查,一个常见的问题是下面的示例代码会抛出
Don't make functions within a loop.
示例代码:
var s1 = '12345'.split('');
var oo = { a: s1, b: s1, c: s1};
function odd(obj){
var tmp = [];
for (var key in obj){
obj[key].forEach( function(val){
if(val%2>0) tmp.push(val);
});
}
return tmp;
}
odd(oo);
我的修复是:
function odd(obj){
var tmp = [], tmpFn;
tmpFn = function(val){
if(val%2>0) tmp.push(val);
};
for (var key in obj){
obj[key].forEach(tmpFn);
}
return tmp;
}
我已经检查过,这有效,但我不确定这是否是修复旧代码的正确方法,此修复是否会产生任何不需要的副作用?还是我应该忽略警告,因为旧代码看起来更清晰?
EDIT :我错过了一个 for 循环,用它更新了示例代码。
不要忽略那个警告,真的没有必要为每个 运行 循环创建一个新函数。
这种方法更好,只要你在定义的 odd() 函数内,它就不会有任何副作用,它会看到与传递的匿名函数相同的变量状态到 forEach.
编辑:即使您决定忽略该警告,也要始终如一地执行 - 使用不认为这是错误的 jshint 配置,或者添加 jshint 注释以在代码中暂时禁用此警告类型 (使用 jshint --verbose 获取选择性切换的警告代码),不要让任何显示的 jshint 警告在没有通知的情况下消失,这违背了首先进行代码分析的目的。
我的问题类似于JSHint won't let me use 'forEach' in a 'for' loop
我们目前的项目中有大约 2k 行 JS,最近包括 jshint
检查,一个常见的问题是下面的示例代码会抛出
Don't make functions within a loop.
示例代码:
var s1 = '12345'.split('');
var oo = { a: s1, b: s1, c: s1};
function odd(obj){
var tmp = [];
for (var key in obj){
obj[key].forEach( function(val){
if(val%2>0) tmp.push(val);
});
}
return tmp;
}
odd(oo);
我的修复是:
function odd(obj){
var tmp = [], tmpFn;
tmpFn = function(val){
if(val%2>0) tmp.push(val);
};
for (var key in obj){
obj[key].forEach(tmpFn);
}
return tmp;
}
我已经检查过,这有效,但我不确定这是否是修复旧代码的正确方法,此修复是否会产生任何不需要的副作用?还是我应该忽略警告,因为旧代码看起来更清晰?
EDIT :我错过了一个 for 循环,用它更新了示例代码。
不要忽略那个警告,真的没有必要为每个 运行 循环创建一个新函数。
这种方法更好,只要你在定义的 odd() 函数内,它就不会有任何副作用,它会看到与传递的匿名函数相同的变量状态到 forEach.
编辑:即使您决定忽略该警告,也要始终如一地执行 - 使用不认为这是错误的 jshint 配置,或者添加 jshint 注释以在代码中暂时禁用此警告类型 (使用 jshint --verbose 获取选择性切换的警告代码),不要让任何显示的 jshint 警告在没有通知的情况下消失,这违背了首先进行代码分析的目的。