2

我的代码如下所示:

var variableX:uint = something;    

if (variableX > 1)
{
  var variableY:uint = foo;
}
else
{
  var variableY:uint = bar;
}

在 FlashDevelop 中编译时,编译器会给出以下警告:

Warning: Duplicate variable definition.

作为 AS3 和编程的初学者,我不喜欢编译器警告。编译器眯着眼睛看着我说:“好吧,伙计,这次我放过你。但我警告你!” 然后没有告诉我我正在做的事情有什么问题。

当我做这样的事情时,我应该注意什么?我的意思是我显然可以在外部定义变量if,然后这不会是一个问题,但也许还有更多的东西?或者编译器只是给出一个有用的提示说“嘿,你可能不小心创建了两个同名的不同变量”?

4

1 回答 1

4

您对警告的评估是正确的。它只是让您知道范围内已经有一个具有该名称的变量,并且您将要重新定义它。这样您就不会意外覆盖变量。尽管如果您在此页面上查看变量提升,它们可能看起来不在同一范围内,但您会看到交易是什么:http: //help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d。 html

缺少块级作用域的一个有趣含义是,您可以在声明变量之前读取或写入变量,只要它在函数结束之前声明即可。这是因为一种称为提升的技术,这意味着编译器将所有变量声明移动到函数的顶部。例如,即使 num 变量的初始 trace() 函数发生在 num 变量声明之前,以下代码仍可编译:

我个人的倾向是自己把定义放在首位,以避免有额外的警告让我错过更重要的问题。离开 AS3 有一段时间了,但在大型项目中,人们放手了,你最终会收到 100 到 1000 条警告,而相关的警告会被埋没。

于 2013-06-26T21:06:57.467 回答