close

AS3 變數的作用區域
 
var 變數名:資料類型


變數名

建議使用半形英文數字
可用大小寫做區別
開頭第一個字不能是數字
不能含有ActionScripr的關鍵字或運算子符號

變數 意義

int 整數
uint 整數
Number 整數(比int,uint還大的數)
String 字串
Array 陣列

 

範例

var myAge:Number;
myAge =30;
trace( "我的年齡" +myAge+ "歲。" )

 

在as3的文檔中明確寫出了變數的作用域,與C和Java不同的是,在as3中沒有代碼塊級別的作用域(block-level scope),舉個例子:

1 for (var i = 0; i < 5; i ++) {
2 trace(i); // 顯示0-4
3 }
4 trace(i); // 顯示5而不是undefined

在C和Java中使用大括弧包括起來的代碼塊也是一個變數作用域,那麼上面這段代碼在C和Java中第四行在編譯執行中就會出錯,
但是在as3中不存在代碼塊這個級別的變數作用域,所以即使在for迴圈內部定義了一個變數在迴圈外也還會繼續存在,
所以上面這段代碼第四行在as3中會正確的顯示成為5而不是undefined。
因此下面這段代碼編譯運行時會出現聲明衝突的錯誤:

1 for(var i = 0; i < 5; i ++) {}
2 for(var i = 0; i < 5; i ++) {} // 變數i聲明衝突,重複聲明錯誤

呵呵,各位用慣了as2的是不是覺得這裏很抓狂。。。。

另外在as3中還有一個更有意思的事情,因為as中的一種叫做hoisting的技術實現機制使得編譯器在編譯時會自動把一個函數中所有變數的聲明挪到函數最頂端,
所以即使你在一個變數被聲明之前調用它甚至賦值都是可以的,舉個例子:

1 trace(num); // 顯示NaN(not a number)而不是undefined
2 var num:Number = 10; // 這裏變數才被聲明
3 trace(num); // 顯示10

上面這個例子可以看到,在num這個變數被聲明之前執行trace(num)會顯示num這個變數是Number類型的預設值:NaN而不是未定義錯誤,
這就是因為編譯器編譯時自動把第二行的變數聲明挪到了最前面導致的。甚至你可以在變數聲明之前進行賦值:

1 num = 5;
2 trace(num); // 顯示5
3 var num:Number = 10;
4 trace(num); // 顯示10

因此在使用變數的時候一定要小心,要儘量養成先賦值再使用的習慣,或者向C語法一樣將所有的賦值語句都置於函數最頂端,
並且儘量在聲明變數時顯式的指定變數的類型。例如下面這個例子就是一個會發生錯誤的情況:

1 tmp = "Hello!"; // 在編譯時會發生類型無法轉換的錯誤,因為後面聲明tmp為Number而不是String型
2 trace(tmp);
3 var tmp:Number = 10; // 聲明tmp變數為Number型
4 trace(tmp);

 

在AS中。聲明變數時。必須用到var關鍵字。比如:var i:Number=0;
而變數命名有一定的相關要求。
1、儘量使用有一定含義的英文單詞。
2、變數名採用駱駝命名法。
即第一個字母小寫。第二個單詞的第一個字母大寫。依此類推。變數的名字應當使用“名詞”或者“形容詞”+“名詞”構成。比如width、heigth、maxHeight、oldAge等。
3、變數命名符合“min-length&&max-information”原則。
即變數名長度越小越好。變數所表達的含義越清楚越好。即對事物的表述情況。
4、儘量避免變數名中出現數位記號。
5、這裏推薦大家不要用關鍵字做為變數名。也不要在首字母使用數位。

arrow
arrow
    全站熱搜

    雞蛋貓異想世界 發表在 痞客邦 留言(3) 人氣()