在ActionScript 1和2中,在同一个作用域里定义一个变量两次,不会有错。比如:
CODE:[Copy to clipboard]// ActionScript 1 and 2
var i:Number = 1;
var i:String = 2;
[code]
但是这种情况在ActionScript3里已经被禁止了。在ActionScript3里,一定你在一个作用域里定义了一个变量,那么在这个作用于里这个变量就无法再被定义或者改变类型了。当然,这并不意味着你就无法更改变量的值了,只是var关键字在一个作用域里对每个变量只能用一次。
[code]
// ActionScript 3
var i:Number = 1;
var i:String = 2; // 错误,变量重复定义
在AS3中,如果你需要一个新的类型,你必须创建一个新的变量来使用这个类型。而且,如果你有同时使用两次var的时候,比如说,在if语句的两个分支语句里,你必须在if语句外面使用var声明,然后在if,else块里给变量赋值,而不要在块里直接使用var。比如:
CODE:[Copy to clipboard]// ActionScript 3 INCORRECT
// (but works in AS1 and AS2)
if (my_btn.enabled == true) {
var returnValue:Number = 1;
}else{
var returnValue:Number = 0;
}
if (provideAsString == true) {
var returnValue:String = "1";
}else{
var returnValue:String = "0";
}
正确的方式应该是:
CODE:[Copy to clipboard]// ActionScript 3 CORRECT
var returnValueNum:Number;
var returnValueStr:String;
if (my_btn.enabled == true) {
returnValueNum = 1;
}else{
returnValueNum = 0;
}
if (provideAsString == true) {
returnValueStr = "1";
}else{
returnValueStr = "0";
}
注意,这里用来两个变量来代表1,因为他们的类型不一样。而且,他们的声明放到了if的前面,而不是在if块里声明两次。
还有一种方法,就是使用一个 * 类型的变量。
CODE:[Copy to clipboard]// ActionScript 3 ALSO OK
var returnValue:*
if (my_btn.enabled == true) {
returnValue = 1;
}else{
returnValue = 0;
}
if (provideAsString == true) {
returnValue = "1";
}else{
returnValue = "0";
}