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

时间:2013-11-07 03:05:52

标签: javascript jquery javascript-events callback jsperf

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

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

我想我的假设是命名回调总是会表现得更好。例如,使用.each命名回调is slightly faster

谢谢你的时间!

编辑我编辑了.each JSPerf测试,因为(a)我没有测试我的意思和(b)我尝试模仿事件更是如此。

编辑2 我的测试设置从一开始就不正确,因为@Esailija指出如下。这个问题有点毫无意义,但至少它可以帮助那些使用JSPerf测试的人。

2 个答案:

答案 0 :(得分:2)

jsperf因为跨越测试边界累积事件处理程序而被破坏。在其他情况下,首先运行的任何测试都将是“最快的”。

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

答案 1 :(得分:1)

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

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

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