0

我有一个关于 Flash 错误 1151 的奇怪问题:与内部命名空间中的定义 i 存在冲突。

这是有问题的代码:

for(var i:Number=dt.getFullYear(); i >= dt.getFullYear()-90; i--)
{
    dtYear.addItem( {label:i, data:i} );
} //for

//-*-*-* Month
for(var i:Number=0; i < months.length; i++)
{
    dtMonth.addItem( {label:i, data:i} );
} //for

或者一个更明显的例子:

for(var i:Number=0; i < 12; i++)
{
    trace(i);
} //for

//-*-*-* Month
for(var i:Number=0; i < 12; i++)
{
} //for

Adobe给出了解释:

You cannot declare more than one variable with the same identifier name within the same scope unless all such variables are declared to be of the same type. In ActionScript 3.0, different code blocks (such as those used in two for loops in the same function definition) are considered to be in the same scope.

这是什么鬼东西?我的意思是 i 变量一直以数字形式存在,类型转换为数字,为什么上面的代码会失败?

如果我以这种方式修改它,它可以工作,但这很丑陋,为什么需要这个?AARGGGHHHH...Flash 开发让我发疯。给我一把枪:)。请有人向我解释一下。

工作代码:

for(var i:Number=dt.getFullYear(); i >= dt.getFullYear()-90; i--)
{
    dtYear.addItem( {label:i, data:i} );
} //for

//-*-*-* Month
for(i=0; i < months.length; i++)
{
    dtMonth.addItem( {label:i, data:i} );
} //for
4

2 回答 2

3

这称为变量提升,在 as3 中变量没有作用域,编译器会将所有声明的变量移动到函数的顶部,因此您不能在同一个函数中声明两次相同的变量。

这里是关于变量使用和声明的文档以获得更深入的信息。

于 2010-07-25T18:48:01.390 回答
2

简短的回答:你不能在同一个函数中两次声明“var i”。在您的第二个循环中,将“i”更改为“j”,您将成为金牌。

于 2010-07-25T18:51:01.603 回答