在for循环之前定义循环迭代器?

时间:2011-06-02 04:33:54

标签: actionscript-3 variables loops

最近,我被批评为构造我的for循环,如此:

var i:MovieClip;
for each(i in array)
{
    // be awesome
}

或者,

var i:uint = 0;
for(i; i<10; i++)
{
    // be more awesome
}

这对我个人而言更好,但我受到了攻击。是否有任何差异?

2 个答案:

答案 0 :(得分:5)

旧答案

是的:你这样做的方式,变量在循环结束后继续存在。确保变量不存在于循环范围之外,可确保您不会在循环外意外地引用该变量。

<强>更新

至少大多数语言都是这样做的。但是,在ActionScript中,for循环变量在父级的范围内!因此,在ActionScript 确实没有区别。

答案 1 :(得分:3)

trutheality的答案是大多数语言中最好的考虑因素,并且考虑到这个问题直到后来都没有标记为actionscript-3,这是一个很好的回答。

然而,Actionscript使用变量提升,其中函数中定义 where 的变量的范围限定为该函数,而不是其最内部的块。这个blog post很好地描述了它,并在docs on variable scope中提到了它。由于提升,在循环之前或之内定义变量之间没有差异

为了表明这有多疯狂,你甚至可以在循环之后定义变量:

for (i = 0; i < 5; i++) {
  trace(i);
}
var i:int;