Actionscript:为什么可以在声明变量之前分配变量?

时间:2011-08-12 19:33:51

标签: flash flex actionscript-3 actionscript flexbuilder

受问题int a[] = {1,2,}; Weird comma allowed. Any particular reason?的启发我记得有关Adobe的Actionscript语法的问题。

出于某种原因,可以(至少在Flex 3中)在声明变量之前为变量赋值:

 public function foo() : void {
      a = 3;
      var a : int = 0;
 }

这是否有意义..?这是Adobe FlexBuilder编译器中的错误吗?或者这可能是因为旧款Ecmascript版本的遗留问题?

3 个答案:

答案 0 :(得分:17)

  

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

Actionscript 3.0 Docs - Variables(引用在页面下方约2/3发现)

答案 1 :(得分:3)

据我所知,Flash Virtual Machine的功能是在函数体执行之前声明(分配内存等)所有函数的变量。因此,在ActionScript代码中的函数块中的某处声明变量只报告编译器声明变量,并在运行时在函数块的开头声明。这就是为什么你的代码与:

相同的原因
public function foo() : void {
      var a : int = 3;
      a = 0;
 }

当你在函数体中声明一些变量两次时,编译器会发出相同的警告。

答案 2 :(得分:0)