问题描述
我在下面的代码中收到JSHint / JSLint错误。
Functions declared within loops referencing an outer scoped variable may lead to confusing semantics. ($, currentVal)
这是针对我正在推送到currentVal
的$options.each
循环。
关于如何解决这个问题有什么想法吗?
$(".option input[type=radio]").change(function() {
reload_filterstring(this);
});
$(".option input[type=checkbox]").change(function() {
reload_filterstring(this);
});
function reload_filterstring(that) {
var finalFilterQuery = {};
var currentEl = "";
(filterType = $this.attr("data-filter-type")),
($options = $this.find("ul.options input")),
(query = $this.find('input[name="query"]')),
(finalQuery = $('input[name="finalQuery"]')),
(filterData = []),
(filterQuery = null);
// console.log(filterName);
currentVal = [];
$options.each(function() {
if ($(this).prop("checked") == true) {
currentVal.push($(this).attr("id"));
}
});
finalFilterQuery[filterName] = currentVal.join("|");
}
// console.log(finalFilterQuery);
var str = "";
for (var key in finalFilterQuery) {
if (finalFilterQuery.hasOwnProperty(key)) {
if (str != "") {
str += ",";
}
str += key + "=" + finalFilterQuery[key];
}
}
console.log(str);
}
1楼
Kei Huynh
-1
2019-03-02 23:09:42
我使用codepen.io JS Analyze运行,结果是: 不要在循环内创建函数。 带有指向的链接 。 您应该将函数移出而不是将其放置在循环中,但是如果您仍然坚持在循环中包含一个函数,则可以像下面那样缩小currentVal范围:
$options.each(function($currentVal) { return function() { if ($(this).prop("checked") == true) { $currentVal.push($(this).attr("id")); }; }(currentVal));