这是为了我的目的而结束的正确方式吗
Was this the right way to make a closure for my purpose?
我越来越慢慢地理解闭包,下面的代码也能工作。我想知道是否有一种更简单/更好的方法来完成我在这里要做的事情。
在下面的代码中,this
只是指一个对象,该对象具有作为数组的sections
属性。我在这个数组上循环,并绑定到每个section
的每个el
属性(DOM元素)的悬停事件。我为hover()
方法提供的回调是闭包的来源。主this
对象有两个方法.sectionMouseenter()
和.sectionMouseleave()
,它们的调用取决于事件类型(在我的代码中由e.type
表示)是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]) );
}
相关文章:
- 如果变量不是't已传递给函数.这是正确的方式吗
- 在jquery中,将文本框值分配给标签是正确的编码方式吗
- 这是显示javascript函数返回值的最佳方式吗
- SVG 可以有多个开始或结束触发器吗?
- 这真的是从事件回调中获取 Rx.Observable 的最佳方式吗?
- 这是发送请求的真实方式吗
- 在现代浏览器中,有这样的自制地图和过滤功能的快捷方式吗
- 这是为了我的目的而结束的正确方式吗
- C#代码:这就是ASP.NET AJAX脚本的工作方式吗
- 这是JavaScript/jQuery回调的正确方式吗
- 这是在单击按钮时将表格行更改为表单的最佳方式吗
- AngularJS-这是写指令的正确方式吗
- 安装Dreamweaver会影响浏览器运行脚本的方式吗?
- 这是javascript模板管理的理想方式吗?
- Navigator组件是react-native应用中切换屏幕的唯一方式吗?
- 有更好的展示和隐藏方式吗
- Facebook Connect与新的JS SDK是“Facebook上的应用程序”的方式吗?
- 在Javascript中有正确的间距方式吗?
- 这是正确的重定向方式吗?
- 这是加载谷歌分析和jQuery的最佳方式吗