gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:03:49 27 4
gpt4 key购买 nike

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 来简化。而不是 some , 和 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 noopener nofollow">in</a> operators[key] .

关于javascript - JSHint 警告 "Function declared within loop referencing an outer scope variable may lead to confusing semantics"。我怎样才能改进代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48442078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com