3
我正在慢慢地瞭解越來越多的閉包,並且下面的代碼有效。我想知道是否有更簡單/更好的方法來完成我在這裏要做的事情。這是爲我的目的而關閉的正確方法嗎?
在下面的代碼中,this
僅指一個對象,它具有一個sections
屬性,該屬性是一個數組。我遍歷這個數組,並綁定每個section
的每個el
屬性(DOM元素)的懸停事件。我提供給hover()
方法回調是在封閉的用武之地。主要this
對象有兩種方法.sectionMouseenter()
和.sectionMouseleave()
是那些獲得取決於事件類型(由e.type
在我的代碼表示)是mouseenter
或mouseleave
調用。作爲一個參數,當前部分被傳遞給這些方法。當然,一個for
循環的迭代在JavaScript中沒有可變範圍,因此封裝變量的引用是必要的。
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)
);
};
這是寫了這個閉包的「正確」方式,還是有更好的方法?
這真是個好建議。而最大你會發現它真的簡化了你的邏輯。 – Joe 2012-03-15 14:00:23
+1以這種方式更具可讀性 – 2012-03-15 14:01:12
+1。謝謝,這正是我問這個問題的原因。我打算將它打開一會兒,看看可能會有什麼其他響應。 – maxedison 2012-03-15 14:17:00