虽然其他答案中关于代码提示和错误检查的观点是准确的,但我想解决关于性能的说法。这真的不是那么真实。理论上,强类型允许编译器生成更接近原生的代码。但是,对于当前的 VM,不会发生这种优化。AS3 编译器在这里和那里将使用整数指令而不是浮点指令。否则,类型指示符在运行时不会产生太大影响。
例如,考虑以下代码:
function hello():String {
return "Hello";
}
var s:String = hello() + ' world';
trace(s);
这是由此产生的 AVM2 操作码:
getlocal_0
pushscope
getlocal_0
getlocal_0
callproperty 4 0 ; call hello()
pushstring 12 ; push ' world' onto stack
add ; concatenate the two
initproperty 5 ; save it to var s
findpropstrict 7 ; look up trace
getlocal_0 ; push this onto stack
getproperty 5 ; look up var s
callpropvoid 7 1 ; call trace
returnvoid
现在,如果我删除类型指示符,我会得到以下信息:
getlocal_0
pushscope
getlocal_0
getlocal_0
callproperty 3 0
pushstring 11
add
initproperty 4
findpropstrict 6
getlocal_0
getproperty 4
callpropvoid 6 1
returnvoid
它完全一样,除了所有名称索引都减少了一个,因为“字符串”不再出现在常量表中。
我并不是要劝阻人们不要使用强类型。人们不应该期待性能方面的奇迹。
编辑:如果有人感兴趣,我已经把我的 AS3 字节码反汇编器放到网上:
http://flaczki.net46.net/codedump/
我已经对其进行了改进,现在它可以取消引用操作数。