私は徐々に閉鎖を理解しており、次のコードが機能します。私がここでやろうとしていることを達成するためのより簡単な方法があれば、私は思っています。これは私の目的のために閉鎖する正しい方法でしたか?
以下のコードでは、this
は、単にオブジェクトであり、配列であるsections
というプロパティを参照しています。私はこの配列をループし、各プロパティ(DOM要素)のホバーイベントにそれぞれsection
のものをバインドします。閉鎖の出番私はhover()
方法に供給するコールバックです。メインthis
オブジェクトには二つの方法.sectionMouseenter()
と(私のコードでe.type
によって表される)イベントタイプがmouseenter
かmouseleave
であるかに応じて呼び出されます.sectionMouseleave()
を持っています。引数として、現在のセクションがこれらのメソッドに渡されます。もちろん、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)
);
};
この閉包を書いたのは「正しい」方法ですか、それとも良い方法ですか?
これは本当に良いアドバイスです。そしてマックスはあなたのロジックを本当に簡単にすることができます。 – Joe
+1このようにしてはるかに読みやすくなります –
+1。ありがとう、これはまさに私がこの質問をした理由です。もう少し反応が出るかもしれないかどうかを少し見開いておきます。 – maxedison