javascript - 这是为了我的目的而关闭的正确方法吗?

标签 javascript jquery closures

慢慢地对闭包的理解越来越多,下面的代码就可以了。我想知道是否有更简单/更好的方法来完成我在这里尝试做的事情。

在下面的代码中,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/

相关文章:

javascript - 使用 Javascript 连接到 Neo4j(无需驱动程序)

php - 从内部引号或heredoc输出php和javascript时出错

javascript - 获取IE对象来控制flash按钮

javascript - 使用 jQuery 缩小文本搜索的选择范围

javascript - 通过包含的字符串查找对象

javascript - JS : Which/How are variables stored in closures?

php - 从 MySQL 表逐行填充自定义 XML 结构

javascript - 仅检查具有不同名称的 radio

functional-programming - 闭包在函数式编程中的地位

javascript - 将事件分配给数组中的对象时绕过闭包