学习 Adobe Flash 中的 ActionScript 2.0 |
|
|
|
| 数据和数据类型 > 关于变量 > 关于变量和范围 > 局部变量 | |||
在函数体内使用 var 语句时,声明的是局部变量。在函数块(又称函数定义)内声明一个局部变量时,该变量是在该函数块的范围内定义的,因而在该函数块结束时会过期。因此,局部变量仅存在于该函数中。
例如,如果在名为 localScope 的函数中声明一个名为 myStr 的变量,该变量在该函数外部将不可用。
function localScope():Void {
var myStr:String = "local";
}
localScope();
trace(myStr); // Undefined,因为 myStr 不是在全局范围内定义的
如果用于局部变量的变量名已经被声明为时间轴变量,则当局部变量在范围内时,本地定义优先于时间轴定义。时间轴变量在该函数外部仍然存在。例如,下面的代码创建了一个名为 str1 的时间轴字符串变量,然后在 scopeTest() 函数中创建一个具有相同名称的局部变量。该函数中的 trace 语句生成该变量的本地定义,而函数外部的 trace 语句生成变量的时间轴定义。
var str1:String = "Timeline";
function scopeTest():Void {
var str1:String = "Local";
trace(str1); // 本地
}
scopeTest();
trace(str1); // 时间轴
在下一个示例中,您可以看到,某些变量仅在特定函数的生命期内有效,如果您尝试在该函数的范围外引用该变量,就会生成错误。
在应用程序中使用局部变量:
function sayHello(nameStr:String):Void {
var greetingStr:String = "Hello, " + nameStr;
trace(greetingStr);
}
sayHello("world"); // Hello, world
trace(nameStr); // undefined
trace(greetingStr); // undefined
Flash 在"输出"面板中显示字符串"Hello, world",并显示 nameStr 和 greetingStr 的值为 undefined,因为这些变量在当前的范围内不再可用。仅能在 sayHello 函数执行时引用 nameStr 和 greetingStr。函数退出后,这些变量将不再存在。
变量 i 和 j 经常用作循环计数器。在下例中,将 i 用作局部变量;它只存在于 initArray() 函数的内部:
var myArr:Array = new Array();
function initArray(arrayLength:Number):Void {
var i:Number;
for(i = 0; i < arrayLength; i++) {
myArr[i] = i + 1;
}
}
trace(myArr); // <blank>
initArray(3);
trace(myArr); // 1,2,3
trace(i); // undefined
|
注意 |
下面的 |
因为变量 i 不是在主时间轴中定义的,所以此示例在 Flash 测试环境中显示 undefined。它仅存在于 initArray() 函数中。
可以使用局部变量防止出现名称冲突,名称冲突可能会导致应用程序出现意外结果。例如,如果将 age 用作局部变量,可以用它在一个上下文中存储一个人的年龄,而在另一个上下文中存储此人的孩子的年龄。因为是在不同的范围中使用这些变量的,因此在这种情况下不会有冲突。
在函数体中使用局部变量是一个很好的习惯,这样该函数可以充当独立的代码。只能在局部变量的代码块中对它进行更改。如果函数中的表达式使用全局变量,则该函数外部的代码或事件也可以更改它的值,这样也更改了该函数。
可以在声明局部变量时为其指定数据类型,这有助于防止将类型错误的数据赋给现有变量。有关详细信息,请参阅关于指定数据类型和严格数据类型指定。
|
|
|
|