如何修复 JSHint "Don't make functions within a loop"(loopfunc 规则)警告?
How to fix JSHint "Don't make functions within a loop" (loopfunc rule) warning?
<button id="rock" class="tools">Rock</button>
<button id="paper" class="tools">Paper</button>
<button id="scissor" class="tools">Scissor</button>
我正在尝试获取一个随机按钮 ID 名称并具有以下代码
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for(var i = 0; i < buttonsCount; i++) {
buttons[i].onclick = function() {
console.log(this.id);
};
}
但是 JSHint validator says Don't make functions within a loop.
(http://jshint.com/docs/options/#loopfunc)
请注意,我想在 JavaScript 中解决这个问题(没有其他框架)。这里有人知道我是怎么做到的吗?
i<=buttonsCount
应该是 i<buttonsCount
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for(var i = 0; i < buttonsCount; i++) {
buttons[i].onclick = function() {
console.log(this.id);
}
}
该警告试图防止您 运行 遇到类似 JavaScript closure inside loops – simple practical example 的问题(这种情况很常见,仅在 SO 上就有大约 1800 个重复项或相关问题)。
幸运的是,您的实际代码不受此问题的影响,这意味着我们可以将函数从循环中拉出。这也修复了 JSHint 警告:
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
var handler = function () {
console.log(this.id);
};
for (var i = 0; i < buttonsCount; i++) {
buttons[i].onclick = handler;
}
<button id="rock" class="tools">Rock</button>
<button id="paper" class="tools">Paper</button>
<button id="scissor" class="tools">Scissor</button>
我正在尝试获取一个随机按钮 ID 名称并具有以下代码
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for(var i = 0; i < buttonsCount; i++) {
buttons[i].onclick = function() {
console.log(this.id);
};
}
但是 JSHint validator says Don't make functions within a loop.
(http://jshint.com/docs/options/#loopfunc)
请注意,我想在 JavaScript 中解决这个问题(没有其他框架)。这里有人知道我是怎么做到的吗?
i<=buttonsCount
应该是 i<buttonsCount
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for(var i = 0; i < buttonsCount; i++) {
buttons[i].onclick = function() {
console.log(this.id);
}
}
该警告试图防止您 运行 遇到类似 JavaScript closure inside loops – simple practical example 的问题(这种情况很常见,仅在 SO 上就有大约 1800 个重复项或相关问题)。
幸运的是,您的实际代码不受此问题的影响,这意味着我们可以将函数从循环中拉出。这也修复了 JSHint 警告:
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
var handler = function () {
console.log(this.id);
};
for (var i = 0; i < buttonsCount; i++) {
buttons[i].onclick = handler;
}