Jshint:循环中的匿名函数(问题)

Jshint: Anonmyous function within a loop (Issue)

本文关键字:函数 问题 循环 Jshint      更新时间:2023-09-26

我的问题类似于JSHint不允许我在"for"循环中使用"forEach"

我们当前项目中大约有 2k JS 行,最近包含在检查jshint,一个常见的问题是以下示例代码会抛出

不要在循环中创建函数。

示例代码:

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;
}

我已经检查过,这有效,但我不确定这是否是修复旧代码的正确方法,此修复程序是否会有任何不必要的副作用? 还是我应该忽略警告,因为旧代码看起来更干净?

编辑:我错过了一个for循环,用它更新了示例代码。

不要忽略该警告,确实没有必要为循环的每次运行创建一个新函数。

这种方法更好,只要你留在带有定义的 odd() 函数内,它就不会有任何副作用,它会看到与传递给 forEach 的匿名函数相同的变量状态。

编辑:即使您决定忽略该警告,也要始终如一地执行此操作 - 要么使用不认为这是一个错误的 jshint 配置,要么添加 jshint 注释以在代码中暂时禁用此警告类型(使用 jshint --verbose 获取用于选择性切换的警告代码),不要让任何显示的 jshint 警告在没有通知的情况下消失, 这首先违背了进行代码分析的目的。