Javascript 在循环中生成函数的替代方法
我在下面的代码中有一个Javascript 在循环中生成函数的替代方法,javascript,closures,jshint,Javascript,Closures,Jshint,我在下面的代码中有一个 this.addHandlers = function (interactions) { for(var eventType in interactions) { if(interactions[eventType]) { this.on(eventType, function () { // do something with interactions[eventType]
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的调用移动到一个函数中来消除警告,但我觉得这没有抓住重点
我怎么能不在循环中创建函数?您必须创建一个函数工厂makeHandler:
如果使用jQuery,可以使用$。每个第一个示例都不起作用,因为我没有调用函数,on函数是。交互实际上是一个对象,而不是数组,因此我需要在属性上循环以使用第二个示例。第四个不起作用,因为我需要在闭包中使用eventType。@JimJeffries您可以使用Object.keys进行迭代。是的,但我仍然会将其放入循环中。正如问题所述,我可以让它不给我一个警告,就像你的例子那样移动函数。我想知道是否有一种方法可以在不在循环中创建函数的情况下仍然使用闭包中的值
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]
}
}