あなたの質問の最初の部分は、他の回答によって適切に回答されています。console.log()
後で呼び出すことができる関数への参照を渡すのではなく、関数を呼び出していました。
他の誰もまだ取り組んでいない質問の 2 番目の部分に答えるには、次のようにします。
はい、使用するよりも、ボタンのより近い祖先にイベント ハンドラーのスコープを設定した方がパフォーマンスが向上します$('body')
。
ボタンにできるだけ近いボタンの祖先を選択する必要がありますが、イベント ハンドラーをインストールするときに静的に存在します (後で動的に破棄/作成されません)。
.live()
推奨されなくなった主な理由の 1 つ.on()
は、.live()
すべてのイベント ハンドラーをdocument
オブジェクトに配置することです。ビジー ページでは、オブジェクトに多数の委任されたイベント ハンドラーが存在する可能性がありdocument
ます。それが発生すると、単一のイベントがオブジェクトまでバブルし、すべてのdocument
単一のイベントを、可能な委任されたイベント ハンドラーの長いリストと比較する必要があります。これは通常、 に対してセレクタ操作を実行することを意味するためeventTarget
、これは非常に遅くなる可能性があります。
一方、目的の eventTarget に非常に近い祖先オブジェクトを選択すると、オブジェクトの非常に小さなリストからのイベントの非常に小さなリストがこの特定の委譲されたイベント ハンドラーを通過し、イベント システム全体のパフォーマンスが向上します。 .
多数のイベント/オブジェクトで最高のパフォーマンスを得るには、委任されたイベント ハンドラーをターゲット オブジェクトのできるだけ近くに適用する必要があります。