Question

I'm running some code through JSHint and I keep getting the following error:

Don't make functions within a loop.

I tried turning off the warning for 'About functions inside loops' off which does nothing to stop the error from being reported. I have decided to refactor the code, using JSHint's suggestions here, http://www.jshint.com/options/ but I'm still getting the error. I was hoping that somebody could help me to refactor this code slightly so it will pass. Here's a copy of the function:

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);
            }
        }
    });
}

I'm using MooTools. The purpose of this function is to pass a parent element and then apply sound event to all of the children with the class 'sound.' I'm using custom HTML attributes, such as 'fk_click_sound' to feed additional information to the function. I picked up this method of assigning a function within a loop from http://blog.jbrantly.com/2010/04/creating-javascript-function-inside.html.

Any suggestions or resources that you can point me to would be great. Thanks!

Was it helpful?

Solution

You can try something like this:

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

OTHER TIPS

You could create the function outside, assign it to a var and use it in your call to addEvent.

As it turns out JS Hint had a bug re: the warning for Looping inside of a function, which they fixed here. Now that this is fixed, this issue is resolved.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top