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

Javascript局部变量-值得使用它们吗?,javascript,performance,variables,local,Javascript,Performance,Variables,Local,人们常说,JavaScript中的局部变量比全局变量快,例如: function () { // Local variable var a = 9 } 例如,我一直在考虑将全局数学对象别名为局部Mathl变量,或者将特定(常用)函数别名为局部变量/函数,如Mathround(),而不是使用Math.round() 现在,我正在考虑使用的东西(例如Math.round())可以在每个动画帧(50ish)中使用很多次,每秒可以使用60帧。因此,如果我这样做,将避免许多查找。-这

人们常说,JavaScript中的局部变量比全局变量快,例如:

function ()
{
     // Local variable
     var a = 9
}
例如,我一直在考虑将全局数学对象别名为局部Mathl变量,或者将特定(常用)函数别名为局部变量/函数,如Mathround(),而不是使用Math.round()

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


所以我的问题是——这真的值得吗?当避免了这么多的查找时,这种差异是否明显?

如果您在本地对父作用域变量进行作用域,则查找速度会更快。要快多少?差异是否明显?只有您可以通过测量代码的性能来判断

文档
化名为局部变量的情况并不少见

例如,看看ExtJS库

(function() {
    var DOC = document,
然而,正如前面所述,要小心盲目地混淆对象成员函数,因为您可能会遇到
这个
值问题

例如


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

当您开始编写人类能够理解的代码时,编写清晰、可读、可维护的代码已经足够困难了。如果你开始尝试写一些计算机可以执行得更快的东西(在你还不知道更快对你的应用程序意味着什么之前),那就困难多了关注清晰度,并在出现性能问题时解决问题。


至于你的具体例子。如果你非常想知道答案,.

说你有以下代码:

for(...) {
  someFunc(); 
  var y = Math.cos(x);
  ...
} 
要执行
Math.cos(x)
,JSVM必须a)计算全局数学对象的位置,b)获取它的
cos
属性。以防万一
someFunc()
里面的人不会做这样疯狂的事情,例如:

Math = {};

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

你可以测量差异。做个实验!您不应该假设
x.y()
的工作原理与
a=x.y相同;a()这不是慢对快的问题。这是一个全局与局部的问题,99%的情况下你需要局部,所以我不担心。不要担心(潜在的)性能改进,比如像
Math
这样的内置别名,除非你有充分的理由这样做。在任何可能的情况下使用局部变量的真正原因是代码质量。关于Google的v8(以及其他一些引擎),您可以查看这段视频,了解它们如何进行性能优化:一个关键是,它们会观察您的代码执行,然后围绕这一点进行优化。因此,在较新的引擎上,执行几次之后,只要您的代码编写良好且可预测,这两种方法都很有可能达到平衡。库中最小化的别名也经常用于使最小化工具做得更好。正确,在代码段中使用别名的目的是为了缩小,不是性能。它可以,但在这种情况下,我高度怀疑它有任何可测量的影响。而且,在编写了上述代码之后,我可以肯定地说原因是缩小了@埃文:哦,我明白了,我真的不能和那个争论;)然而,在gzip之后,我想知道别名和非别名在大小上是否真的有着关键的区别?
Math = {};