【问题标题】:JSHint error Don't make functions within a loopJSHint 错误不要在循环中创建函数
【发布时间】:2023-03-30 21:26:02
【问题描述】:

我正在通过 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 中选择了这种在循环中分配函数的方法。

您可以指出我的任何建议或资源都会很棒。谢谢!

【问题讨论】:

  • 你确定这是一个错误吗?这可能只是一个警告。
  • 这只是一个警告,但它会在我的 ant 构建过程中弹出,导致构建停止完成。
  • @Spencer:您能否在顶部还原您的编辑,提交您的解决方案作为答案,然后接受您自己的答案来结束这个问题?这将从未回答的问题列表中删除它。干杯!
  • @ConspicuousCompiler 我将编辑移至单独的答案中。感谢您的建议!

标签: javascript jshint


【解决方案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);
}

【讨论】:

    【解决方案2】:

    您可以在外部创建函数,将其分配给var,然后在您对addEvent 的调用中使用它。

    【讨论】:

      【解决方案3】:

      事实证明,JS Hint 有一个错误:函数内部循环的警告,他们修复了here。现在解决了这个问题,这个问题就解决了。

      【讨论】:

      • 问题未解决:尝试将问题中的文本粘贴到 jshint.com。我相信您的链接是关于其他内容的。