在「Frame」上用「var」來宣告變數的差異
基本上要宣告「區域變數」我們必須加上「var」來宣告之,為何筆者要加上「必須」來強調呢?這是因為加上「var」宣告在「Function」和宣告在「Frame」之間兩者將有所差異,所以我們不妨先看下述這兩個例子:
筆者製作兩個欲測試的flash,並且在它們的「Frame 1」個別加上些程式以便驗證,如下述:
var:Frame 1
var i = 10; trace(i);
結果:
10
non_var:Frame 1
i = 10; trace(i);
結果:
10
從上述的例子之中,我們可以發現其實兩者的結果是相同的,但是將它們的bytecode攤出來看之下,的確可以發現些端倪~
在「var i = 10;」宣告之下所採用的ActionCode為「0x3C」(ActionDefineLocal),相反的若直接採用「i = 10」來宣告的話,其所採用的ActionCode則為「0x1D」(ActionSetVariable),然而重點在於Flash雖然在兩者之間採用不同的ActionCode來處理,但是在取值的方式卻是利用相同的「0x1C」(ActionGetVariable)來取得變數值,所以我們可以就此推論:在「Frame」上無論是否使用「var」來宣告變數,其實是無傷大雅地!然而在「Function」卻並非如此~
By The Way, 在ActionScript 3.0之下採用「i = 10」的方式宣告變數是無法完成編譯的!
本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。