根据以下文章,http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html ,模块函数应该比全局函数执行得更好,因为它们不必沿着全局作用域链向后查找函数。封装在模块内的函数位于其自己的私有(private)范围内,理论上这将提供相当大的性能提升。我尝试复制此内容但没有成功,此处: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;
}());
};
最佳答案
我同意其他评论者的观点,即这是一个微观优化——除非您处于一个大循环中,或者您正在编写像 React 这样的框架,否则您不必担心它。
话虽这么说,我 modified your jsperf test使得全局功能测试用例的表现稍差一些。在您的原始版本中,全局函数被调用为
window.gfunc(i)
我把它改成了
gfunc(i)
因为您在原始文件中指定了 window
,所以无需遍历作用域链来查找该函数,因此我预计不会有太大差异。
关于performance - Javascript 模块函数与全局函数性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152756/