JSHint警告“在循环中声明的引用外部作用域变量的函数可能会导致语义混乱”。如何改善代码?

凯特

JSHint显示错误:“在循环中声明的引用外部作用域变量的函数可能会导致语义混乱”。如何改善以下代码以消除警告?

var getPrecedence  = function getPrecedence(operator, operators) {
    var keys = Object.keys(Object(operators));
    for (var i = 0, len = keys.length; i < len; i++) {
        var check = Object.keys(operators[keys[i]]).some(function (item) {
            return item === operator;
    });
    if (check) return operators[keys[i]][operator];
    }
};
贝吉

您不应在循环体内使用函数表达式,而应在外部进行声明:

function getPrecedence(operator, operators) {
    function isOperator(item) {
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
        return item === operator;
    }
    var keys = Object.keys(Object(operators));
    for (var i = 0, len = keys.length; i < len; i++) {
        var check = Object.keys(operators[keys[i]]).some(isOperator);
//                                                       ^^^^^^^^^^
        if (check) return operators[keys[i]][operator];
    }
}

当然,仅通过使用includes而不是somefind而不是循环就可以简化整个过程

function getPrecedence(operator, operators) {
    var keys = Object.keys(Object(operators));
    var opkey = keys.find(key =>
        Object.keys(operators[key]).includes(operator)
    );
    if (opkey) return operators[opkey][operator];
}

最后,Object.keys(…).includes(…)可以简化为operator in operators[key]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章