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

这是指向 JSPERF 测试我在Mac上运行了Firefox和Chrome。

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

谢谢你的时间!

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

编辑2 从一开始,我的测试设置是不正确的,如@esailija所指出的。这个问题有些毫无意义,但至少可以帮助某人进行JSPERF测试。

有帮助吗?

解决方案

jsperf被损坏了,因为您在测试边界上积累了事件处理程序。在其他WROD中,首先进行的任何测试都将是“最快的”。

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

其他提示

匿名函数是作为参数传递的,因此要解决其引用,范围链并不能完全回到创建它的父函数 - 它仅作为参数存在。另一方面,为了解决对命名函数的引用,范围链一直遵循返回到创建命名函数的父函数闭合。

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

编辑: 如果您打电话 a.off(); 要删除任何事件处理程序,命名功能将比解决匿名函数一样快或更快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top