Я постепенно все больше разбираюсь в замыканиях, и следующий код работает.Мне интересно, есть ли более простой / лучший способ выполнить то, что я пытаюсь сделать здесь.
В приведенном ниже коде this
относится просто к объекту, который имеет свойство sections
это массив.Я зацикливаюсь на этом массиве и связываюсь с событием hover каждого свойства el
(элемент DOM) каждого section
.В обратном вызове, который я предоставляю методу 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)
);
};
Является ли это "правильным" способомчтобы написать это закрытие, или есть лучший способ?