jQuery 事件回调速度:匿名与命名函数

jQuery Event Callback Speed: Anonymous vs. Named Functions

本文关键字:函数 事件 回调 速度 jQuery      更新时间:2023-09-26
这是一个

随机的问题,但我想知道为什么命名回调相对于匿名函数而言,对于点击事件而言表现更差。

这是我在Mac上的Firefox和Chrome上运行的JSPerf测试的链接。

我想我的假设是命名回调总是表现得更好。例如,当使用.each时,命名回调会稍微快一些。

谢谢你的时间!

编辑

编辑.each JSPerf测试,因为(a)我没有测试我的意思,(b)我试图更多地模仿事件。

编辑 2 我的测试设置从一开始就不正确,如下@Esailija指出。这个问题有点毫无意义,但至少它可能有助于某人进行 JSPerf 测试。

jsperf 被破坏,因为您跨测试边界累积事件处理程序。在其他 wrods 中,无论先运行什么测试,都将是"最快的"。

测试的整个前提是荒谬的,如果其他条件相同,则有名称的函数和没有名称的函数之间没有区别。只有当您错误地设置 jsperf 时,您才会看到差异。当您不断为它们获得相同的结果时,您就知道您设置正确 - 但您已经从常识中知道这一点:)

匿名函数作为参数传递,因此为了解析其引用,作用域链不会一直追溯到创建它的父函数 - 它仅作为参数存在。另一方面,为了解析对命名函数的引用,作用域链将一直追溯到创建命名函数的父函数闭包。

编辑:我试图证明这一点,但似乎匿名函数实际上并没有更快地解决 - http://jsperf.com/scope-chain-anonymous-function

编辑:如果调用a.off();删除任何事件处理程序,则命名函数将与解析匿名函数一样快或更快。

  • http://jsperf.com/jquery-events-anonymous-vs-named-callbacks/2
  • http://jsperf.com/jquery-event-callback-nested/2