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 是解析器的指令,不是在运行时执行的命令。如果某个特定标识符已在函数体 (*) 的任何位置声明一次或多次 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 会提示为此。但在我看来,保留两个 var 更易于维护,将所有相关代码放在一起,而不是在函数顶部有一个额外的、容易忘记的代码。

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

(*:嵌套函数体除外)

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

相关文章:

sql - 如果根据 EXPLAIN QUERY PLAN 它应该是相反的,为什么一个 SQL 查询比另一个慢?

python - 有人知道这个 Python 数据结构吗?

Java代码速度提升

javascript - 将 Javascript 变量传递给 CakePdf

javascript - 使用 Object.Create 将函数添加到 JavaScript 对象

javascript - JSON.stringify(ComplexArray) 返回一个空字符串

mysql - 如何加快该查询(子选择)的执行速度?

performance - Grails:部署时间非常慢。 'Resolving Dependencies...' 需要 10 多秒

javascript - Ant Design/antd 日历在模态内不起作用

JavaScript : I cannot access JSON objects inside an array using array index