質問

これは一種のランダムな質問ですが、匿名の関数と比較して、クリックイベントの場合、名前付きコールバックがより悪化した理由を疑問に思っていました。

これが次のリンクです jsperf MacでFirefoxとChromeで実行したテスト。

私の仮定は、コールバックという名前が常に良くなると仮定したと思います。たとえば、使用する場合 .each 名前付きコールバック 少し速いです.

御時間ありがとうございます!

編集 編集しました .each jsperfテストは(a)私が意味したことをテストしていなかったので(b)私は 試してみる イベントをさらに模倣する。

編集2 @esailijaが以下で指摘しているように、私のテストのセットアップは最初から間違っていました。この質問はやや無意味ですが、少なくともJSPerfテストを受けている人に役立つかもしれません。

役に立ちましたか?

解決

JSPERFは、テスト境界にイベントハンドラーを蓄積するため、壊れています。他のえっこでは、最初に実行されるテストが何であれ「最速」になります。

そして、テストの前提全体はばかげているので、他のすべてが等しい場合、名前と名前を持たない機能を持つ関数の間に違いはありません。 jsperfを誤って設定している場合にのみ違いが表示されます。あなたが彼らのために常に平等な結果を得るとき、あなたはそれを正しくセットアップすることを知っています - しかし、あなたはすでに常識からこれを知っているでしょう:)

他のヒント

匿名関数は引数として渡されるため、参照を解決するために、スコープチェーンはそれを作成した親関数に戻ることはありません - それは引数としてのみ存在します。一方、指定された関数への参照を解決するために、スコープチェーンは、指名された関数が作成された親機能閉鎖にさかのぼります。

編集:私はこれを証明しようとしましたが、匿名関数が実際にはより速く解決されないように思われます - http://jsperf.com/scope-chain-anonymous-function

編集: あなたが電話するなら a.off(); イベントハンドラーを削除するために、名前付き関数は、匿名関数を解決するのと同じくらい高速または高速になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top