闭包中的变量性能与函数参数的关系

时间:2013-09-09 06:05:36

标签: javascript scope

有没有人知道通过函数参数传递变量的优化效果与通过闭包获得变量?似乎通过函数参数传递变量会更快,因为对象是通过引用复制的(如此快速的复制时间),并且爬上函数的范围环境需要检查每个级别的环境。这是我的意思的要点

a = 5;
b = function() {
  alert(a);
}
b();

a = 5;
b = function(c) {
  alert(c);
}
b(a);

哪个在理论上表现得更快?

3 个答案:

答案 0 :(得分:5)

我刚才有同样的问题,所以我一起打了a quick'n'dirty benchmark。似乎大多数流行的浏览器(令人惊讶地)更喜欢在范围内查找(FF24非常如此)。

我希望这能回答你的问题。

答案 1 :(得分:3)

  

攀登功能的范围环境需要检查每个级别的环境

理论上只有。事实上,由于范围链不是动态的,因此可以并且将优化为静态引用。

  

通过函数参数传入变量会更快,因为对象是通过引用复制的(如此快速的复制时间)

即使它非常快,它们仍然需要被复制。该函数需要为它们分配额外的内存,而对闭包的引用并不是那样的。


如果您可以在闭包范围中添加值,请执行此操作。它只是实用的,你想建立一个闭包。如果您不希望并且在函数中需要变量参数,请使用参数。使用更易读的替代方案。

答案 2 :(得分:-2)

一切都取决于。不要担心它,除非它将来是一个大问题。