actionscript-3 - For 循环变量作用域混淆

标签 actionscript-3 for-loop scope

我注意到 for 循环中变量的奇怪行为。这不是一个真正的问题,但它让我很不安。
实际上,我以这种方式创建了两个循环:

for (var i:uint; i<19; i++) SomeFunction (i);
for (var i:uint; i<26; i++) SomeOtherFunction (i);

我收到的是编译警告:Warning: Duplicate variable definition.
这个警告真的让我感到惊讶。在其他语言中,我从未发生过这样的事情。
看来i变量进入层次结构中较高的范围,并在循环块之外变得可用。我也试过用花括号包含循环块,但它没有改变任何东西。
为什么会发生?正常吗?有可能避免吗?现在我只是为这两个变量设置了不同的名称,但我认为这不是一个真正的解决方案。我真的很想使用 i -在我的大多数 for 循环中命名变量。

最佳答案

是的,循环增量变量在循环父级的范围内,而不是在循环本身内。这是故意的,例如这样的例子:

public function getPositionOfValue ( value:String ) : int
{
    for ( var i:int = 0; i < someArray; i++ )
    {
        if (someArray[i] == value )
        {
            break;
        }
    }

    return i;
}

这允许您在循环结束后访问 i 的值。在很多情况下,这非常有用。

在同一范围内有多个循环的情况下,您应该做的是循环外的 var i :
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;
}

然后你摆脱你的警告。要考虑的另一件事是将循环增量变量命名为更具描述性的名称。

更新:需要考虑的另外两件事:

1) 除了颜色和 Flex 需要 uint 的地方之外,您不应该使用 uint。它们的使用速度比 int 慢。来源] 1更新:看起来在较新版本的 Flash 播放器中可能不再是这种情况:source

2) 当您在循环声明中更改循环增量变量时,您需要确保将其设置为正确的初始化值,通常为 0。如果不这样做,您可能会很难追踪错误。

关于actionscript-3 - For 循环变量作用域混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479896/

相关文章:

c# - 如何使用 ColorMatrix 为图像的每个像素设置相同(恒定)的色调值?

c++ - 编译器是否优化了 "for"语句中的第二个条件?

scope - 如何在 Gradle 构建中使用为 jar 文件提供的范围?

actionscript-3 - TextField() - 如何防止鼠标选择

java - 用于 Java 的异步 HTTP 客户端

javascript - 从客户端 Web 应用程序中提取 excel 内容

java - 将额外代码添加到 for 循环的递增步骤

r - r 中带循环的函数

syntax - 如何在后续 block 中访问 va_list

Delphi本地函数