当前位置: 代码迷 >> JavaScript >> 在循环内在循环上引用外部作用域变量
  详细解决方案

在循环内在循环上引用外部作用域变量

热度:28   发布时间:2023-06-05 15:50:18.0

我在下面的代码中收到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);
}

我使用codepen.io JS Analyze运行,结果是: 不要在循环内创建函数。 带有指向的链接 。 您应该将函数移出而不是将其放置在循环中,但是如果您仍然坚持在循环中包含一个函数,则可以像下面那样缩小currentVal范围:

 $options.each(function($currentVal) { return function() { if ($(this).prop("checked") == true) { $currentVal.push($(this).attr("id")); }; }(currentVal)); 

  相关解决方案