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