Flash ActionScript3.0 (2)函數的引用

函數的引用
編程中經常用到函數的引用,因爲函數屬於複雜數據類型,所以函數與類一樣,是通過引用來操作數據的。
引用函數的語法就是使用函數名。例如:事件中的接收者函數其實是通過引用來實現的。
下面的代碼定義了名爲onClick的函數,這個函數有個參數e,其數據類型是類類型(MouseEvent),並且有void標明這個函數沒有返回值:
 mc.addEventListener("click",onClick);
function onClick(e:MouseEvent):void
{
mc.x = mc.x + 5;
}
看第一行代碼:
 mc.addEventListener("click",onClick);
函數或方法addEventListener()有兩個參數:
第1個參數click,表示單擊事件名,
第2個參數onClick,是函數名。也就是說第二個參數傳遞的是函數的引用。
同樣,在使用setInterval()函數時,也是用函數的引用
function test() {
trace("函數被調用");
}
setInterval(test,1000); 這一行中的test就是對前面定義的函數的引用
所以能用函數作爲參數,是因爲函數是一種複雜數據類型的數據,任意數據類型的變量都可以作爲函數的參數。
用函數作爲參數的實例:
//調用函數
referFunc(traceMsg);
//定義函數
function traceMsg():void {
trace("this is function");
}
//函數的引用作爲參數
function referFunc(f:Function):void {
f();
}
在函數referFunc()中定義了一個數據類型爲Function,即函數類型的參數,然後通過函數名f和()調用函數,這就是用函數名作爲參數。
用函數作爲參數並傳遞函數的參數實例:
//調用函數
referFunc(traceMsg,"this is function");
//定義函數
function traceMsg(msg:*):void
{
trace(msg);
}
//函數的引用作爲參數並傳遞引用函數的參數
function referFunc(f:Function,msg:*):void
{
f(msg);
}
用函數作爲參數,實際上是在函數內調用了函數f(msg),參數f 是對函數traceMsg的引用。
 函數名即引用,引用可以有多個,所以可通過變量來引用函數
//用變量func引用函數
var func:Function = traceMsg;
//通過引用調用函數
func();
//定義函數
function traceMsg():void
{
trace("this is function");
}
上面的代碼簡化爲:
//定義變量並引用函數
var func:Function = function():void
{
trace("this is function");
}
//調用函數
func();
代碼首先定義了函數類型的變量func,通過“=”運算符把函數的引用賦值給變量func。
提示:代碼中的函數並沒有函數名,這樣的函數稱爲無名函數,由於沒有函數名,只能通過引用來調用這個函數。
注意:當用變量來引用函數並調用函數時,要確定先定義變量,再調用函數,因爲變量要先定義纔可以使用。
在使用複雜數據類型的變量時,只有變量引用同一個實體時,這兩個變量纔會相等。同樣只有兩個變量引用同一個函數時,這兩個變量纔會相等。
//變量func1引用函數traceMsg
var func1:Function = traceMsg;
//變量func2引用函數traceMsg
var func2:Function = traceMsg;
//比較兩個變量的引用是否相等
trace(func1==func2);
function traceMsg(msg:*):void
{
trace(msg);
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章