javascript - JSHint 关于使用外部变量的循环内部闭包的警告

标签 javascript loops closures jshint

我的代码确实有效,但我不想再出现 jshint 错误:

Functions declared within loop referencing an outer scoped variable may lead to confusing semantics

  1. 我尝试使用 ES6 中的 let 来解决该错误,因为我认为这可以解决问题。我将 gruntfile 配置为也使用 ES6。

  2. 我尝试使用两个循环,外部循环使用变量“i”,内部循环使用变量“j”

都不起作用。

此处提供完整代码:https://jsfiddle.net/rwschmitz/zz7ot3uu/

var hobbies = document.getElementsByClassName("hobbies");
var active = false;

// For mouse input

for (var i = 0; i < 5; i++) {
    hobbies[i].onmouseover = function() {
            hobbies[0].classList.add('hobbies-slide-left');
            hobbies[1].classList.add('hobbies-slide-right');
            hobbies[2].classList.add('hobbies-slide-left');
            hobbies[3].classList.add('hobbies-slide-right');
            hobbies[4].classList.add('hobbies-slide-left');
    };
}

// For click input

for (var i = 0; i < 5; i++) {
    hobbies[i].onclick = function() {
            hobbies[0].classList.add('hobbies-slide-left');
            hobbies[1].classList.add('hobbies-slide-right');
            hobbies[2].classList.add('hobbies-slide-left');
            hobbies[3].classList.add('hobbies-slide-right');
            hobbies[4].classList.add('hobbies-slide-left');
    };
}

最佳答案

您可以使用Array#forEach()将循环更改为类似的内容:

var hobbies = Array.from(document.getElementsByClassName('hobbies'));
var classes = ['hobbies-slide-left', 'hobbies-slide-right'];
var events = ['mouseover', 'click'];

function addHobbyClass (hobby, index) {
  hobby.classList.add(this[index % this.length]);
}

function hobbyEventListener () {
  hobbies.forEach(addHobbyClass, classes);
}

hobbies.forEach(function (hobby) {
  this.forEach(function (event) {
    this.addEventListener(event, hobbyEventListener);
  }, hobby);
}, events);

关于javascript - JSHint 关于使用外部变量的循环内部闭包的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46506653/

相关文章:

r - 对于列中的每个唯一值,找到最少 4 个日期

python - 如何使用装饰器将变量注入(inject)范围?

javascript - 计算机科学中函数闭包的正式定义

javascript - 单击弹出窗口未打开未捕获的类型错误 : Cannot read property 'top' of undefined

java - 在 Java 的 for 循环中使用 Println 函数?

javascript - 编写 HTML/CSS/JS 选项卡导航系统的最佳方式(无图像)

c# - 使用大量对象,需要更好的(排序的)性能

groovy - Groovy 中 GString 中的 Elvis 运算符

javascript - 断线在 Javascript 警报功能中不起作用

javascript - 如果在 javascript 中返回,如何抓取搜索结果(使用 python)