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

时间:2015-01-27 08:36:34

标签: javascript jshint

我的问题类似于JSHint won't let me use 'forEach' in a 'for' loop

我们当前项目中有大约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循环,用它更新了示例代码。

1 个答案:

答案 0 :(得分:2)

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

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

编辑:即使您决定忽略该警告,也要一致地执行 - 使用不认为这是错误的jshint配置,或添加jshint注释以在代码中临时禁用此警告类型(使用jshint --verbose获取选择性切换的警告代码),不要让任何显示的jshint警告在没有通知的情况下发生,这样就无法首先进行代码分析。