10

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

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

相对

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

理论上哪个性能更快?

4

3 回答 3

5

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

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

于 2013-10-02T09:14:45.797 回答
3

爬升函数的作用域环境需要检查每个级别的环境

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

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

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


如果您可以在闭包范围内放置一个值,请执行此操作。这只是实用的,你想建立一个闭包。如果您不想并且不需要函数中的可变参数,请使用参数。使用更具可读性的替代方案。

于 2013-10-02T12:24:32.630 回答
-3

这一切都取决于。除非将来有大问题,否则不要担心。

于 2013-09-09T06:26:45.060 回答