Javascript局部变量 - 是否值得使用它们?

时间:2014-01-11 22:18:56

标签: javascript performance variables local

很多人都说,局部变量比JavaScript中的全局变量更快,例如:

function ()
{
     // Local variable
     var a = 9
}

例如,我一直在考虑将全局Math对象别名化为本地Mathl变量,或者将特定(常用)函数别名化为局部变量/函数(如Mathround()),而不是使用Math.round()。

现在,我正在考虑使用的东西(例如Math.round())可以在每个动画帧(50ish)中使用很多次,并且每秒可以有60帧。因此,如果我这样做,将会避免相当多的查找。 - 这只是我能做到的一个例子。我可以使用很多类似的变量。

所以我的问题是 - 这真的值得吗?当避免这么多查找时,差异是否有形?

3 个答案:

答案 0 :(得分:1)

如果你不知道它是否值得,那么它可能不是。换句话说,您应该通过识别,测量和测试特定于情境的备选方案来解决发生时的性能问题

当你开始写人类可以理解的东西时,编写清晰,可读,可维护的代码是很困难的。如果您尝试编写计算机可以执行更快的内容(在您甚至知道应用程序方面的意味着什么之前),那就更难了。 注重清晰度并解决性能问题。

至于你的具体例子。如果你想知道答案,then test it

答案 1 :(得分:0)

如果在本地范围内调整父范围变量,查找会更快。多快了?区别是否显着?只有您可以通过衡量代码的性能来判断。

document别名为局部变量并不罕见。

例如,请查看ExtJS库的this part

(function() {
    var DOC = document,

然而,就像已经说过的那样,要小心别名对象成员函数,因为你可能会遇到this值问题。

E.g。

var log = console.log;

log('test'); //TypeError: Illegal invocation

//you could use bind however
log = console.log.bind(console);

答案 2 :(得分:0)

说你有这段代码:

for(...) {
  someFunc(); 
  var y = Math.cos(x);
  ...
} 

执行Math.cos(x) JS VM必须a)计算全局Math对象的位置,b)获取它的cos属性。以防万一someFunc()内的人不做这样的疯狂事情,例如:

Math = {};

一般来说,JS对局部变量的访问与已知索引访问数组元素类似(如果不准确)。访问全局对象几乎总是通过键映射来查找。