在循环之外定义变量是否更好?

Fra*_*isc 5 actionscript-3

第二个比第一个好吗?

第一:

var count:int=myArray.length;
for(var i:uint=0;i<count;i++)
{
   var str:String=myArray[i].label;
   var somethingElse:Class=...;
   var andAnotherThing:MyInstance=new MyInstance(somethingElse);
   ...
}
Run Code Online (Sandbox Code Playgroud)

第二:

var count:int=myArray.length;
var str:String;
var somethingElse:Class;
var andAnotherThing:MyInstance;
for(var i:uint=0;i<count;i++)
{
   str=myArray[i].label;
   somethingElse=...;
   andAnotherThing=new MyInstance(somethingElse);
   ...
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Pet*_*ter 8

在Actionscript和Javascript中,变量的作用域是函数,而不是块.它被称为可变吊装.

ActionScript 3.0变量

缺少块级范围的一个有趣含义是,只要在变量在函数结束之前声明,就可以在变量声明之前读取或写入变量.这是因为一种称为提升的技术,这意味着编译器将所有变量声明移动到函数的顶部.

因此,无论您在函数中声明变量的位置如何,您的代码都将如此有效:

var count:int;
var str:String;
var i:uint;
var somethingElse:Class;
var andAnotherThing:MyInstance;

count = myArray.length;
for(i=0;i<count;i++)
{
   str=myArray[i].label;
   somethingElse = ...;
   andAnotherThing = new MyInstance(somethingElse);
   ...
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,我仍然更愿意在使用它们的块中声明我的变量,主要是出于维护原因和一般清晰度.