这是一个随机问题,但我想知道为什么命名回调对于单击事件而言表现更差,相对于匿名函数。
以下是我在Firefox和Chrome上运行的JSPerf测试的链接。
我想我的假设是命名回调总是会表现得更好。例如,使用.each
命名回调is slightly faster。
谢谢你的时间!
编辑我编辑了.each
JSPerf测试,因为(a)我没有测试我的意思和(b)我尝试模仿事件更是如此。
编辑2 我的测试设置从一开始就不正确,因为@Esailija指出如下。这个问题有点毫无意义,但至少它可以帮助那些使用JSPerf测试的人。
答案 0 :(得分:2)
jsperf因为跨越测试边界累积事件处理程序而被破坏。在其他情况下,首先运行的任何测试都将是“最快的”。
测试的整个前提是荒谬的,如果其他条件相同,则具有名称的函数与没有名称的函数之间没有区别。只有在错误地设置jsperf时才会看到差异。如果你经常得到相同的结果,那么你就知道你正确地设置了它 - 但你已经从常识中知道了这一点:)
答案 1 :(得分:1)
匿名函数作为参数传递,因此要解析其引用,作用域链不会一直返回到创建它的父函数 - 它只作为参数存在。另一方面,为了解析对命名函数的引用,范围链一直追溯到创建命名函数的父函数闭包。
修改强> 我试图证明这一点,但似乎匿名函数实际上没有得到更快的解决 - http://jsperf.com/scope-chain-anonymous-function
编辑:如果您调用a.off();
删除任何事件处理程序,则命名函数将与解析匿名函数一样快或更快。