我正在通过JSHint运行一些代码,我不断收到以下错误:
不要在循环中创建函数。
我尝试关闭“关闭循环内部功能”的警告,这无法阻止报告错误。我决定使用JSHint的建议重构代码,http://www.jshint.com/options/但我仍然得到错误。我希望有人可以帮助我稍微重构这些代码,以便通过。这是函数的副本:
function setSounds(parent) {
var i,
l;
parent.getElements('.sound').each(function (elem) {
var soundEvents = [];
if (elem.get('fk_click_sound')) {
soundEvents.push('click');
}
if (elem.get('fk_mouseover_sound')) {
soundEvents.push('mouseenter');
}
if (soundEvents.length !== 0) {
for (i = 0, l = soundEvents.length; i < l; i += 1) {
elem.addEvent(soundEvents[i], (function () {
return function (e) {
FKSoundAIR(FKSoundStd[this.get('fk_' + e.type + '_sound')]);
};
})(elem), false);
}
}
});
}
我正在使用MooTools。此函数的目的是传递父元素,然后将声音事件应用于具有类“声音”的所有子元素。我正在使用自定义HTML属性,例如'fk_click_sound'来向函数提供其他信息。我选择了这种在http://blog.jbrantly.com/2010/04/creating-javascript-function-inside.html的循环中分配函数的方法。
您可以指出的任何建议或资源都会很棒。谢谢!
答案 0 :(得分:1)
您可以尝试这样的事情:
function make_handler(div_id) {
return function () {
alert(div_id);
}
}
for (i ...) {
div_id = divs[i].id;
divs[i].onclick = make_handler(div_id);
}
答案 1 :(得分:1)
您可以在外部创建该功能,将其分配给var
并在您对addEvent
的通话中使用该功能。
答案 2 :(得分:1)
事实证明JS Hint有一个错误:一个函数内部循环的警告,他们修复了here。现在这已得到修复,此问题已得到解决。