透過此項技術,編譯器會將變數宣告移至函數的最上層。
但編譯器並不會升舉任何指定陳述式
即只升舉宣告變數的部份,但不會升舉指定值給變數的部份。
(例一)
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]
沒有留言:
張貼留言