【发布时间】:2013-09-09 06:05:35
【问题描述】:
有人知道通过函数参数传入变量与通过闭包获得变量的优化效果吗?似乎通过函数参数传递变量会更快,因为对象是通过引用复制的(复制时间如此之快)并且攀登函数的范围环境需要检查每个级别的环境。这是我的意思的要点
a = 5;
b = function() {
alert(a);
}
b();
对
a = 5;
b = function(c) {
alert(c);
}
b(a);
理论上哪个性能更快?
【问题讨论】:
-
比什么更快?依据什么标准? ECMA-262 没有定义实现,所以理论上两者都不是更快。标识符必须在作用域链上解析,无论它们属于哪个执行上下文,因此理论上应该更快地解析局部变量。但与直觉相反,众所周知,全局变量在某些环境中更快。所以“测试会告诉你”和“期望在不同的浏览器中得到不同的结果”适用。
-
但它们不可互换...第一个函数依赖于
a而第二个不依赖于,因此您可以在不同的情况下使用它们。 -
@elclanrs——我理解这个问题是解决局部变量还是解析范围链上的父变量(通过闭包建立)是否更快。
-
jsperf.com/scope-vs-passed-test123123 测试似乎表明速度因浏览器而异。然而,当涉及到 js 垃圾收集器时,我会对内存使用差异和最终浏览器性能更感兴趣。我对此有一个稍微相关的问题:stackoverflow.com/q/20673056/1647538
-
你能解释一下使用闭包相对于函数参数有什么好处吗?
标签: javascript scope