gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:52:29 25 4
gpt4 key购买 nike

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com