受问题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版本的遗留问题?
答案 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)