一尘不染

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

javascript

我相信在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];
}

阅读 443

收藏
2020-05-01

共1个答案

一尘不染

绝对没有区别 意义还是性能,在JavaScript或ActionScript。

var是解析器的指令,而 不是
运行时执行的命令。如果var在函数体(*)中的任何位置一次或多次声明了特定的标识符,则该标识符在块中的所有使用将引用局部变量。value声明是var在循环内部,循环外部还是同时声明这两者都没有区别。

因此,您应该写出最容易阅读的内容。我不同意Crockford的观点,将所有var放在函数顶部始终是最好的选择。对于在代码部分中临时使用变量的情况,最好var在该部分中进行声明,因此该部分可以独立存在并且可以复制粘贴。否则,在重构过程中将几行代码复制粘贴到新函数中,而无需分别挑选并移动关联的var,这会使您自己成为意外的全局对象。

特别是:

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

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

Crockford将建议您删除第二个var(或同时删除vars和do var i;),而jslint会为此向您请教。但是IMO将两个都var保留在一起,将所有相关代码保持在一起,而不是在函数顶部保留一些容易忘记的额外代码,是更可维护的。

我个人倾向于将var变量声明为代码的独立部分中的第一个赋值,无论是否在同一函数的其他部分中单独使用了同一变量名。对我来说,var根本不需要声明是JS
wart(最好将变量默认设置为local)。我不认为我也有责任在JavaScript中复制ANSI C的旧版本的限制。

(*:除了嵌套函数体中)

2020-05-01