【发布时间】:2012-05-03 20:51:41
【问题描述】:
小问题:
假设我们包含了 jQuery。这个函数会执行得更快吗...
var example1 = (function($, jQuery) {
return function() {
// do something
}
})()
...比下面的一个:
var example2 = (function() {
return function() {
// do something
}
})()
?
在第一个中,jQuery 对象将是undefined,在第二个中它将被继承。所以第二个应该更贵?
提高速度和消除会降低性能的继承变量的最佳方法是什么?
jsPerf 测试:http://jsperf.com/objinheritance
【问题讨论】:
-
这可能会回答你的问题:stackoverflow.com/questions/9248963/…
-
第二个不会被继承吧?它将是全球性的。就像第一个一样。只有在本地访问它是未定义的,你仍然有 window.$ 和 window.jQuery.
-
引用:“过早的优化是万恶之源”。继续学习 JS 中的作用域,非常好 - 但不要为了优化而优化。仅当一段代码(一次)执行数千次时,此特定问题才相关。谷歌的关键字:“范围链”。计算机 (CPU) 时间比开发人员时间便宜得多!!!
-
我不认为全局变量会降低性能,我也不认为用未定义的局部变量使它们黯然失色会提高性能。我也不认为值得为随着时间的推移可能不成立的性能损失编写令人困惑/丑陋的代码。只需编写正常、干净的代码,让 JavaScript 引擎开发人员担心底层性能。
-
请注意这与继承无关 (
objinheritance?)。第一个 sn-p 是词法闭包和变量遮蔽的示例——参数 over-shadow 是 jQuery 定义的全局变量。
标签: javascript variables global-variables scope