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

    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时期的利器,逐渐黯然退出了历史舞台。

    让我们说声:兄弟,一路走好!

你可能感兴趣的:(函数,方法,职场,AS,休闲)