rhi*_*ino 12 scope for-loop actionscript-3
我注意到for循环中变量的奇怪行为.这不是一个真正的问题,但它让我很烦恼.
实际上我用这种方式创建了两个循环:
for (var i:uint; i<19; i++) SomeFunction (i);
for (var i:uint; i<26; i++) SomeOtherFunction (i);
Run Code Online (Sandbox Code Playgroud)
我收到的是汇编警告:
Warning: Duplicate variable definition.
这个警告让我感到惊讶.在其他语言中没有发生过这种情况.
似乎i变量进入了层次结构中更高的范围,并且在循环块之外变得可用.我也尝试在花括号中包含循环块,但它没有改变任何东西.
为什么会这样?这是正常的吗?有可能避免它吗?现在我只为这两个变量设置了不同的名称,但我认为这不是一个真正的解决方案.我真的很想i在我的大多数for循环中使用-named变量.
Rya*_*ill 14
是的,循环增量变量在循环父级的范围内,而不在循环本身内.这是故意的,例如:
public function getPositionOfValue ( value:String ) : int
{
for ( var i:int = 0; i < someArray; i++ )
{
if (someArray[i] == value )
{
break;
}
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
这允许您在循环结束后访问i的值.有很多情况下这非常有用.
在同一作用域内有多个循环的情况下,应该做的是在循环外部使用var:
public function getPositionOfValue ( value:String ) : int
{
var i:int;
for ( i = 0; i < 15; i++ )
{
//do something
}
for ( i = 0; i < 29; i++ )
{
//do something else
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
然后你摆脱了你的警告.另一件需要考虑的事情是将循环增量变量命名为更具描述性的变量.
更新:另外两件事要考虑:
1)除了颜色和Flex期望uint的地方之外,你不应该使用uints.它们比int要慢.来源] 1更新:在新版本的Flash播放器中可能不再出现这种情况:来源
2)当你在一个循环声明中修改一个循环增量变量时,你想确保你将它设置为正确的初始化值,通常为0.如果你不这样做,你可以很难找到一些bug.