将事件传递给另一个函数

Pass event to another function

var that = this;

for(var i=0;i<x;++i){
// some code
events={
   click: function(event){
     that.doClick(event,this);
}
}
}

现在使用上面的代码我得到了 JShint 错误:

"Dont make functions within loop".

为了解决上述错误,我现在这样做:

   var that = this;
    function clickHandler() {
                return function() {
                    that.doClick(this);
                };
            }

for(var i=0;i<x;++i){
// some code
events={
   click: clickHandler()
}
}

这样可以吗?如果是,那么如何将点击事件中的事件传递给 clickHandler,然后再传递给 doClick 函数?

不,这样不好。在循环内创建函数的问题是您在每次迭代时创建函数的新副本。

在您的第二个代码中,您在每次迭代时调用 clickHandler,这将 return 每次都调用不同的函数副本。所以还是一样的问题

相反,更好的方法是在循环之前只创建一次函数,并在内部引用它:

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 */
}