简短的问题:
假设我们包含了jQuery。这个函数执行得更快......
var example1 = (function($, jQuery) {
return function() {
// do something
}
})()
......比下一个:
var example2 = (function() {
return function() {
// do something
}
})()
在第一个中,jQuery对象将是undefined
,在第二个中它将被继承。那么第二个应该更贵?
提高速度和摆脱降低性能的继承变量的最佳方法是什么?
jsPerf测试:http://jsperf.com/objinheritance
答案 0 :(得分:3)
正如ECMAScript定义的那样,参考分辨率是一个内部到外部的查找过程,因此在第一个示例中,$
变量 1步来自您的代码,在第二个示例中,$
位于全局范围内时,它至少 2步,这会导致额外的查找开销。
然而,在现实世界中,现代javascript引擎(例如V8)没有实现与ECMAScript完全相同的参考分辨率,他们有一种方法来 flattern 范围链,在其他对于大多数代码而言,所有变量都可以在一步中引用,完全没有查询开销。
结论:他们彼此真的相同。
PS:以及范围链,javascript引擎在原型链上具有完全相同的优化,因此也无需担心属性查找开销