2011年7月19日 星期二

[AS3] 變數範圍之「升舉」技術

AS3變數有一個叫做「升舉」的技術,允許在變數宣告之前,讀取或寫入變數。
透過此項技術,編譯器會將變數宣告移至函數的最上層


但編譯器並不會升舉任何指定陳述式
只升舉宣告變數的部份,但不會升舉指定值給變數的部份。

(例一)

trace(num); //trace得NaN,NaN是Number型別的預設值,代表num已經宣告,但尚未初始化(賦值)
var num:Number = 100;
trace(num); //100
trace("**********************");

trace(str); //null
var str:String = "Hello";
trace(str); //Hello
trace("**********************");

aUint = 66;
trace(aUint); //66,先賦值,底下才宣告,透過「升舉」,var aUint:uint的宣告被移到最上方
var aUint:uint = 99;
trace(aUint); //99















(例二)

trace(mc); //null ←Object型別的預設值(代表mc此時已升舉宣告)
myFunc();

function myFunc():void{
trace("myFunc !!!"); //myFunc !!!
mc = new MyObject();
trace(mc); //[object MyObject]
}

var mc:Object;
trace(mc); //[object MyObject]



將(例二)修改如以下:

trace(mc); //null ←Object型別的預設值(代表mc此時已升舉宣告)(但指定賦值部份並未被升舉)
myFunc();

function myFunc():void{
trace("myFunc !!!"); //myFunc !!!
trace(mc); //null
}

var mc:Object = new MyObject();
trace(mc); //[object MyObject]







沒有留言: