天天看點

揭開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,如需轉載請自行聯系原作者

繼續閱讀