我越来越慢地理解闭包,以下代码可以正常工作.我想知道是否有更简单/更好的方法来完成我在这里尝试做的事情.
在下面的代码中,这仅仅指一个对象,它具有一个数组的sections属性.我遍历这个数组,并绑定到每个部分的每个el属性(一个DOM元素)的悬停事件.我提供给hover()方法的回调就是闭包进来的地方.这个对象主要有两个方法.sectionMouseenter()和.sectionMouseleave()根据事件类型是否被调用(由我的e.type表示) code)是mouseenter或mouseleave.作为参数,当前部分将传递给这些方法.当然,for循环的迭代在JavaScript中没有变量范围,因此需要一个闭包来封装section变量的引用.
for (var i = this.sections.length - 1; i >= 0; i--) {
var section = that.sections[i];
section.el.hover(
(function(section){
return function(e){
that['section' + e.type.capitalize()](section);
}
})(section)
);
};
解决方法:
不要动态构造函数,而是将它放在for循环之外.
var sections = this.sections;
function dummy(section) {
return function(e) {
that['section' + e.type.capitalize()](section);
}
}
for (var i = sections.length - 1; i >= 0; i--) {
section.el.hover( dummy(sections[i]) );
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。