Ошибка JSHint Не создавать функции в цикле - PullRequest
1 голос
/ 04 октября 2011

Я запускаю некоторый код через 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.

Любые предложения или ресурсы, на которые вы можете указать мне, были бы великолепны. Спасибо!

Ответы [ 3 ]

1 голос
/ 04 октября 2011

Вы можете создать функцию снаружи, назначить ее для var и использовать ее при вызове addEvent.

1 голос
/ 17 мая 2014

Как оказалось, в JS Hint была ошибка re: предупреждение о зацикливании внутри функции, которое они исправили здесь . Теперь, когда это исправлено, эта проблема решена.

1 голос
/ 04 октября 2011

Вы можете попробовать что-то вроде этого:

function make_handler(div_id) {
    return function () {
        alert(div_id);
    }
}
for (i ...) {
    div_id = divs[i].id;
    divs[i].onclick = make_handler(div_id);
}
...