var that = this;
for(var i=0;i<x;++i){
// some code
events={
click: function(event){
that.doClick(event,this);
}
}
}
现在使用上面的代码我得到JShint错误“不要在循环中创建函数”。
要解决上述错误,我现在正在执行此操作
var that = this;
function clickHandler() {
return function() {
that.doClick(this);
};
}
for(var i=0;i<x;++i){
// some code
events={
click: clickHandler()
}
}
这样好吗?如果是,那么如何将事件从click事件传递给clickHandler然后再执行doClick funciton
答案 0 :(得分:0)
不,这不好。在循环中创建函数的问题是在每次迭代时创建函数的新副本。
在第二个代码中,每次迭代都会调用clickHandler
,每次都会返回一个不同的函数副本。所以它仍然是同样的问题。
相反,更好的方法是在循环之前仅创建一次函数,并在其中引用它:
var that = this;
function clickHandler(event) {
that.doClick(event, this);
}
for(var i=0; i<x; ++i){
var events = {click: clickHandler};
}
但是,由于events
似乎不依赖于i
,因此您也可以将其移到外面:
var that = this,
events = {click: function(event){
that.doClick(event, this);
}};
for(var i=0; i<x; ++i){
/* Use `events` here */
}