将事件传递给另一个函数
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 */
}
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 */
}