天天看点

揭开AS程序的外纱(七) -- 函数的这些,你知道不?

<b>    1. </b><b>函数参数可以设定默认值</b>

<b>    </b>这个是AS3.0新增加的功能,非常实用。在AS2.0中,要实现相同功能,需要多写不少代码。下面我们来看看用法:

<b>    </b>function testFunc(x:int, y:int = 5):void {

<b>    </b><b>    </b>trace(x, y);

<b>    </b>}

<b>    </b>testFunc(1); //返回:1 5

<b>    </b>testFunc(1,3); //返回:1 3

<b>    </b>采用默认值,我们可以方便的实现一些非常灵活的函数传参。不过要注意的是,采用默认值的参数,一定要放在后面。比如上例,第一行如果改成:

<b>    </b>function testFunc(x:int = 5, y:int)

<b>    </b>编译时是会报错的。

<b>    </b><b>2. arguments </b><b>对象 和 ...(rest)参数</b>

<b>    </b>(1) 在AS2.0中,函数实际传递参数数量可以超过函数定义中需要的参数。虽然在AS3.0的帮助文档中,说AS3.0也是可以的。<b>但实际上,在Flash cs3 pro下编译,除非使用...(rest)参数,否则是不可以的!</b>验证方式很简单,我们用下面这段代码做个测试:

<b>    </b>function testFunc(str:String){

<b>    </b><b>    </b>trace(str);

<b>    </b>testFunc("a","b");

<b>    </b>在AS2.0中运行通过;但在AS3.0中编译报错!

<b>    </b>唉,这年头,帮助文档也靠不住啊!

<b>    </b>(2) ...(rest)参数是AS3.0新出的功能,使用...(rest)参数后,可以传递任意多个参数给函数,而<b>...(rest)参数包含了多出来的那些参数</b>。<b>...(rest)参数必须放在函数参数的最后面</b>,不然会报错!

<b>    </b>function testFunc(str:String, ...args){

<b>    </b><b>    </b>for (var i:uint = 0; i &amp;lt; args.length; i++) {

<b>    </b><b>    </b><b>    </b>trace(args[i]);

<b>    </b><b>    </b>}

<b>    </b>testFunc("a","b","c");

<b>    </b>输出:

<b>    </b>b

<b>    </b>c

<b>    </b>(3) arguments应用于AS2.0时代,功能和...(rest)参数类似。但是由于AS3.0在严格模式下并不支持传递参数数量超过函数定义数量。并且,<b>使用了...(rest)参数后,函数不再支持arguments参数</b>。

<b>    </b>当然,arguments还有一个可应用于递归函数的callee属性。但是这个属性本身的使用范围并不大。我们完全可以用函数体本身的名字来实现。因此,在AS3.0中,这个曾经AS2.0时期的利器,逐渐黯然退出了历史舞台。

本文转自 windtoto 51CTO博客,原文链接:http://blog.51cto.com/windtoto/383600,如需转载请自行联系原作者

继续阅读