根据以下文章http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html,模块函数应该比全局函数执行得更好,因为它们不必在全局范围链中向后移动以查找函数。封装在模块内的功能属于它们自己的专用范围,理论上可以提供相当大的性能提升。我试图复制这个没有成功,在这里:http://jsperf.com/module-function-vs-global-function。是否有另一种方法可以提高使用全局函数的性能?
Benchmark.prototype.setup = function() {
window.gvar = 5;
window.gfunc = function(x) {
return window.gvar + x;
}
window.go = function() {
for (var i = 0; i < 100000000; i++) {
window.gfunc(i)
}
}
var M = (function() {
var me = {}, mvar = 5;
function mfunc(x) {
return mvar + x;
}
me.go = function() {
for (var i = 0; i < 100000000; i++) {
mfunc(i)
}
}
return me;
}());
};
答案 0 :(得分:1)
我同意其他评论者认为这是微优化 - 除非你处于一个大循环中,或者你正在编写像React这样的框架,否则你不应该担心这个问题。
话虽如此,我modified your jsperf test使全局函数测试用例表现得更糟。在您的原始函数中,全局函数被调用为
window.gfunc(i)
我将其改为
gfunc(i)
因为你在原版中指定了window
,所以没有必要在范围链中查找函数,所以我不希望在那里有太大的区别。
答案 1 :(得分:0)
现代浏览器中的差异非常小,因为全局函数window.gfunc将被缓存。 看到 key advances to JavaScript performance in Windows 10
答案 2 :(得分:0)
正如其他人所评论的那样,除非您计划开发一个非常大的框架或应用程序,否则我也找不到任何明显的差异。通常人们使用范围的另一个主要问题是保持插件的数据是私有的,并且自己包含在其他插件中。