将事件传递给另一个函数

时间:2015-08-14 19:00:07

标签: javascript javascript-events jshint

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

1 个答案:

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