2010-07-25 101 views
0

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

这里是有问题的代码:

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变量一直存在为一个数字,作为一个数字进行了类型化,为什么上面的代码会失败?

如果我以这种方式修改它,它可以工作,但这是UGLY和为什么这是需要的? AAARGGGHHHH ... 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 

回答

3

这就是所谓的可变悬挂,在AS3中存在的变量没有范围,编译器会在您的函数的顶部将所有声明的变量,所以你不能申报在同一个函数中两次相同的变量。

Here有关变量用法和更深层信息声明的文档。

+0

那么Flash/AS3从来没有一个用户友好的语言/用户界面:)。多么愚蠢的行为:(((。谢谢。 – Jauzsika 2010-07-25 19:31:23

2

简答:你不能在同一个函数中声明两次“var i”。在你的第二个循环中,将“我”改为“j”,你就会变成金子。