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

问题描述 投票:3回答:2

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

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

我想我的假设是,命名回调将始终表现更好。例如,当使用.each时,命名的回调is slightly faster

感谢您的时间!

[Edit我编辑了.each JSPerf测试,因为(a)我没有测试我的意思,并且(b)我正在[[trying以便更模仿事件。

Edit 2我的测试设置从一开始就不正确,因为@Esailija指出如下。这个问题虽然没有什么意义,但至少可以对进行JSPerf测试的人有所帮助。

javascript jquery callback jquery-events jsperf
2个回答
2
投票
jsperf损坏,因为您在测试边界上累积了事件处理程序。在其他情况下,首先进行的测试将是“最快的”。

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


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

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

编辑:

如果调用a.off();删除任何事件处理程序,则命名函数将与解析匿名函数一样快或更快。
© www.soinside.com 2019 - 2024. All rights reserved.