慢慢地对闭包的理解越来越多,下面的代码就可以了。我想知道是否有更简单/更好的方法来完成我在这里尝试做的事情。
在下面的代码中,this
只是指一个对象,它有一个 sections
属性,它是一个数组。我遍历这个数组,并绑定(bind)到每个 section
的每个 el
属性(一个 DOM 元素)的悬停事件。我提供给 hover()
方法的回调是闭包的来源。主要的 this
对象有两个方法 .sectionMouseenter()
和.sectionMouseleave()
根据事件类型(在我的代码中由 e.type
表示)是 mouseenter
还是 来调用鼠标离开
。作为参数,当前部分被传递给这些方法。当然,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]) );
}
关于javascript - 这是为了我的目的而关闭的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9721196/