JavaScript 变量是在循环外声明还是在循环内声明?

标签 javascript performance

在 AS3 中,我认为您应该初始化循环外的所有变量以提高性能。 JavaScript也是这种情况吗?哪个更好/更快/最佳实践?

var value = 0;

for (var i = 0; i < 100; i++)
{
    value = somearray[i];
}

for (var i = 0 ; i < 100; i++)
{
    var value = somearray[i];
}

最佳答案

在 JavaScript 或 ActionScript 的含义或性能上,绝对没有区别

var 是解析器的指令,而 not 是在运行时执行的命令。如果一个特定的标识符在函数体(*)的任何地方被声明了一次或多次var,那么在 block 中对该标识符的所有使用都将引用局部变量。 value 是在循环内、循环外还是两者都声明为 var 没有区别。

因此,您应该编写您认为最易读的任何一个。我不同意 Crockford 的观点,即把所有的变量放在函数的顶部总是最好的。对于在一段代码中临时使用变量的情况,最好在该段中声明var,以便该段独立,可以复制粘贴。否则,在重构期间将几行代码复制粘贴到一个新函数中,而无需单独挑选和移动相关联的 var,你就会意外得到一个全局变量。

特别是:

for (var i; i<100; i++)
    do something;

for (var i; i<100; i++)
    do something else;

Crockford 会建议你删除第二个 var(或者删除两个 var 并执行上面的 var i;),jslint 会发牢骚为此。但是 IMO 保留两个 var 更易于维护,将所有相关代码放在一起,而不是在函数顶部有额外的、容易忘记的代码。

就我个人而言,我倾向于将变量的第一次赋值声明为独立代码段中的 var,无论在同一函数的其他部分中是否存在相同变量名的另一种单独用法.对我来说,必须声明 var 是一个不受欢迎的 JS 疣(最好将变量默认为本地);我不认为我有责任在 JavaScript 中复制 [an old revision of ANSI C] 的限制。

(*: 嵌套函数体除外)

关于JavaScript 变量是在循环外声明还是在循环内声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684923/

相关文章:

javascript - 将 enum 序列化为 const JsonNet

javascript - 在javascript中通过类名获取最后一个元素的最短方法

Javascript - 通过数组映射,但仅在没有错误时返回值

c - fprintf 对时间戳计数器有奇怪的影响

performance - 各种 clojure 矩阵库之间存在哪些性能权衡?

performance - 我可以做些什么来提高 Lua 程序的性能?

javascript - Node js 创建服务器并连接

algorithm - 算法练习效率

c# - 将 WPF 项目从 3.5 迁移到 4.0 后,什么可能导致性能下降?

javascript - DOM中元素的offsetHeight和scrollHeight有什么区别?