有 意义还是性能,在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
(或同时删除var
s和do var i;
),而jslint会为此向您请教。但是IMO将两个都var
保留在一起,将所有相关代码保持在一起,而不是在函数顶部保留一些容易忘记的额外代码,是更可维护的。
我个人倾向于将var
变量声明为代码的独立部分中的第一个赋值,无论是否在同一函数的其他部分中单独使用了同一变量名。对我来说,var
根本不需要声明是JS wart(最好将变量默认设置为local)。我不认为我也有责任在JavaScript中复制ANSI C的旧版本的限制。
(*:除了嵌套函数体中)