简短的问题:
假设我们包含了jQuery。这个函数会执行得更快吗...
var example1 = (function($, jQuery) {
return function() {
// do something
}
})()
。比以下一个:
var example2 = (function() {
return function() {
// do something
}
})()
?
在第一个中,jQuery对象将被undefined
,在第二个中,它将被继承。所以第二个应该更贵吗?
提高速度和摆脱降低性能的继承变量的最佳方法是什么?
jsPerf test: http://jsperf.com/objinheritance
正如 ECMAScript 所定义的,引用解析是一个从内到外的查找过程,因此在第一个示例中,$
变量距离代码 1 步,而在第二个示例中,虽然$
驻留在全局范围内,但它至少相距 2 步,这会导致额外的查找开销。
然而,在现实世界中,现代 JavaScript 引擎(如 V8)并没有像 ECMAScript 所说的那样实现引用解析,它们有一种扁平化作用域链的方法,换句话说,对于大多数代码,所有变量都可以在一个步骤中引用,根本没有查找开销。
结论:他们彼此之间真的是一样的。
PS:除了作用域链,javascript 引擎在原型链上也有完全相同的优化,所以也不需要担心属性查找开销。