替代在循环中创建函数

时间:2014-03-04 18:24:13

标签: javascript closures jshint

我有以下代码

this.addHandlers = function (interactions) {
    for(var eventType in interactions) {
        if(interactions[eventType]) {
            this.on(eventType, function () {
                // do something with interactions[eventType]
            });
        } 
    }
};

jshint给了我以下警告

Don't make functions within a loop

但是因为我需要在循环中创建的eventType变量来完成我的事件处理程序中的闭包,所以我无法在循环外创建函数。我可以通过将this.on的调用移动到函数中来消除警告,但我觉得这是错过了重点。

我怎么能不在循环中创建函数?

1 个答案:

答案 0 :(得分:0)

您必须创建一个函数工厂makeHandler

this.addHandlers = function (interactions) {
    for(var eventType in interactions) {
        if(interactions[eventType]) {
            this.on(eventType, makeHandler(evetType));
        } 
    }
};
var makeHandler = function(eventType){
    return function(){
         // do something with interactions[eventType]
    }
}

如果你有jQuery,你可以使用$.each()