根据经验,这些编写跨浏览器Javascript函数的方法中哪一个会表现更好?
方法1
function MyFunction() { if (document.browserSpecificProperty) doSomethingWith(document.browserSpecificProperty); else doSomethingWith(document.someOtherProperty); }
方法2
var MyFunction; if(document.browserSpecificProperty) { MyFunction = function() { doSomethingWith(document.browserSpecificProperty); }; } else { MyFunction = function() { doSomethingWith(document.someOtherProperty); }; }
编辑:迄今为止所有优秀答案的Upvote.我已经将函数修复为更正确的语法.
到目前为止,关于答案的几点 - 虽然在大多数情况下它是一个相当无意义的性能增强,但是有一些原因可能仍然需要花费一些时间来分析代码:
必须在慢速计算机,移动设备,旧浏览器等上运行.
好奇心
使用相同的通用主体来提高性能,增强对IF语句的评估确实 需要一些时间的其他方案.
Rex M.. 16
除非你这样做万亿次,否则没关系.使用对您和/或您的组织更具可读性和可维护性的那个.通过编写干净,简单的代码,您可以获得的生产率提高,而不仅仅是缩短JS执行时间的十分之一秒.
你甚至应该开始考虑什么时候表现更好,只有当你编写代码并且速度慢得令人无法接受时.然后你应该开始追踪瓶颈,这永远不会是这样的.在这里,从一个切换到另一个,你永远不会获得可衡量的性能提升.
除非你这样做万亿次,否则没关系.使用对您和/或您的组织更具可读性和可维护性的那个.通过编写干净,简单的代码,您可以获得的生产率提高,而不仅仅是缩短JS执行时间的十分之一秒.
你甚至应该开始考虑什么时候表现更好,只有当你编写代码并且速度慢得令人无法接受时.然后你应该开始追踪瓶颈,这永远不会是这样的.在这里,从一个切换到另一个,你永远不会获得可衡量的性能提升.
不幸的是,上面的代码实际上并不是跨浏览器友好的,因为它依赖于其他浏览器中不存在的mozilla怪癖 - 即function
语句被视为分支内的function
表达式.在其他不基于mozilla构建的浏览器上,上面的代码将始终使用第二个函数定义.我做了一个简单的测试用例来证明这一点.
基本上ECMAScript规范说函数语句的处理方式类似于var声明,例如.它们都被提升到当前执行范围的顶部(例如,