次の間に違いはありますか: (例1を避ける理由はありますか?)
1:
$("#stuff").on("resize", function() { doThis(); });
$("#stuff").on("resize", function() { doThat(); });
二:
$("#stuff").on("resize", function() {
doThis();
doThat();
});
次の間に違いはありますか: (例1を避ける理由はありますか?)
1:
$("#stuff").on("resize", function() { doThis(); });
$("#stuff").on("resize", function() { doThat(); });
二:
$("#stuff").on("resize", function() {
doThis();
doThat();
});
2 番目の例でdoThis()
は、例外がスローされた場合doThat()
は実行されません。最初の例ではそうではありません。
率直に言って、実際の違いはありません。
実際のコードでは、
ハンドラーをアタッチします。
$("#stuff").on("resize.A", function() { doThis(); });
...
$("#stuff").on("resize.B", function() { doThat(); });
ハンドラーを 1 つ切り離します。
$("#stuff").off("resize.A");
のハンドラーresize.B
はアタッチされたままになります (つまりdoThis()
、呼び出されませんが、呼び出さdoThat()
れます)。
唯一の違いは、2 つの異なるイベント ハンドラー関数が格納されて実行され、2 番目のスニペットが 1 つで満たされることです。
計算してみましょう。2 番目のスニペットの方がエレガントです。パフォーマンスについては触れませんが、「数百」のメソッドをそのようにバインドする場合、複数のハンドラーをバインドしたくないことは明らかです。
2 つ目はもう少しパフォーマンスが向上します。
最初の例では、サイズ変更イベントが発生したときに、(doThis および doThat の呼び出しに加えて) 2 つの関数呼び出しのオーバーヘッドがあります。2 番目の例では、呼び出されるイベント ハンドラは 1 つだけです。