有人知道通过函数参数传入变量与通过闭包获得变量的优化效果吗?似乎通过函数参数传递变量会更快,因为对象是通过引用复制的(复制时间如此之快),并且攀登函数的范围环境需要检查每个级别的环境。这是我的意思的要点
a = 5;
b = function() {
alert(a);
}
b();
相对
a = 5;
b = function(c) {
alert(c);
}
b(a);
理论上哪个性能更快?
有人知道通过函数参数传入变量与通过闭包获得变量的优化效果吗?似乎通过函数参数传递变量会更快,因为对象是通过引用复制的(复制时间如此之快),并且攀登函数的范围环境需要检查每个级别的环境。这是我的意思的要点
a = 5;
b = function() {
alert(a);
}
b();
相对
a = 5;
b = function(c) {
alert(c);
}
b(a);
理论上哪个性能更快?
不久前我有同样的问题,所以我拍了一个 quick'n'dirty benchmark。似乎大多数流行的浏览器(令人惊讶地)更喜欢在范围内查找(FF24 非常如此)。
我希望这回答了你的问题。
爬升函数的作用域环境需要检查每个级别的环境
只是理论上。事实上,由于作用域链不是动态的,因此可以并将其优化为静态引用。
通过函数参数传入变量会更快,因为对象是通过引用复制的(复制时间如此之快)
即使它非常快,它们仍然需要被复制。该函数需要为它们分配额外的内存,而对闭包的引用则不是这样。
如果您可以在闭包范围内放置一个值,请执行此操作。这只是实用的,你想建立一个闭包。如果您不想并且不需要函数中的可变参数,请使用参数。使用更具可读性的替代方案。
这一切都取决于。除非将来有大问题,否则不要担心。