JSHint 警告 "Function declared within loop referencing an outer scope variable may lead to confusing semantics"。我怎样才能改进代码?

JSHint warning "Function declared within loop referencing an outer scope variable may lead to confusing semantics" . How can I improve the code?

JSHint 显示错误: "Function declared within loop referencing an outer scope variable may lead to confusing semantics"。 如何改进以下代码以消除警告?

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 instead of some, and find 而不是循环来简化整个事情:

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<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in" rel="noreferrer">in</a>operators[key].

在调用函数之前添加,这个会绕过那个检查

/* jshint -W083 */