1. 函数参数可以设定默认值
这个是AS3.0新增加的功能,非常实用。在AS2.0中,要实现相同功能,需要多写不少代码。下面我们来看看用法:
function testFunc(x:int, y:int = 5):void {
trace(x, y);
}
testFunc(1); //返回:1 5
testFunc(1,3); //返回:1 3
采用默认值,我们可以方便的实现一些非常灵活的函数传参。不过要注意的是,采用默认值的参数,一定要放在后面。比如上例,第一行如果改成:
function testFunc(x:int = 5, y:int)
编译时是会报错的。
2. arguments 对象 和 ...(rest)参数
(1) 在AS2.0中,函数实际传递参数数量可以超过函数定义中需要的参数。虽然在AS3.0的帮助文档中,说AS3.0也是可以的。但实际上,在Flash cs3 pro下编译,除非使用...(rest)参数,否则是不可以的!验证方式很简单,我们用下面这段代码做个测试:
function testFunc(str:String){
trace(str);
}
testFunc("a","b");
在AS2.0中运行通过;但在AS3.0中编译报错!
唉,这年头,帮助文档也靠不住啊!
(2) ...(rest)参数是AS3.0新出的功能,使用...(rest)参数后,可以传递任意多个参数给函数,而...(rest)参数包含了多出来的那些参数。...(rest)参数必须放在函数参数的最后面,不然会报错!
function testFunc(str:String, ...args){
for (var i:uint = 0; i < args.length; i++) {
trace(args[i]);
}
}
testFunc("a","b","c");
输出:
b
c
(3) arguments应用于AS2.0时代,功能和...(rest)参数类似。但是由于AS3.0在严格模式下并不支持传递参数数量超过函数定义数量。并且,使用了...(rest)参数后,函数不再支持arguments参数。
当然,arguments还有一个可应用于递归函数的callee属性。但是这个属性本身的使用范围并不大。我们完全可以用函数体本身的名字来实现。因此,在AS3.0中,这个曾经AS2.0时期的利器,逐渐黯然退出了历史舞台。