9.局部变量 电影剪辑限制了电影剪辑变量的作用域,变量被定义在电影剪辑中,而且只要这些电影剪辑存在(在工作区中),那么这些变量就持续。
有时候,变量生存的时间比我们需要的还长。在我们只是需要一个临时变量的情况下,ActionScript提供了只有局部作用域的变量(也就是局部变量),局部变量生存的时间比常规的电影剪辑变量短了许多。
局部变量被用于函数中以及早期Flash 4风格的子程序中。如果你以前没有使用过函数或子程序,你可以跳过这一部分并在未来章节中学习了函数之后再重新光临这里。
函数经常使用一些在该函数外并不被需要的变量。例如,假设我们有一个函数,该函数显示某个被指定的数组中的所有元素: function displayElements (theArray) { var counter = 0; while (counter < theArray.length) { trace ("Element " + counter + ": " + theArray[counter]); counter ++; } }
变量counter对于显示该数组来说是必要的,但是除此之外,它再也没有存在的价值了。我们也可以将它定义在时间轴上,不过至少有两个原因能够说明那是很讨人嫌的行为:(1)如果counter持续,在电影播放的余下时间内它将占据着一定的存储器空间(虽然减价,但是内存条对我来说还是很贵),而且(2)如果counter在我们的函数外可以被访问,那么它可能会与其他的被命名为counter的变量发生冲突。因此,我们非常愿意看到在函数displayElements ()结束之后,counter立即死去。
为了促使counter在该函数的结尾处被自动删除,我们将它定义为局部变量。局部变量和电影剪辑变量不同,当定义它们的函数结束时,解释器会自动地将它们从存储器中移除(即取消分配,deallocated)。
为了将某个变量指定为局部的,从你的函数内部用var关键字来声明它,如同在前述displayElements ()函数的例子中那样。
提请注意,当位于某个函数的外部时,var语句创建一个常规的时间轴变量,而非局部变量。var语句所在的位置是产生这些区别的根源。
函数中的变量并非都是局部的。在某个函数的内部,通过忽略var关键字,我们可以创建并改变某个电影剪辑变量。即,如果我们不使用var关键字,而代之以仅仅为某个变量赋值,在某些情况下Flash认为该变量是非局部变量。考虑下列函数内部的变量赋值语句: function setHeight () { height = 10; }
语句height = 10;的作用取决于height是否是一个局部变量或者是一个时间轴变量。如果此前height被声明为局部变量,语句height = 10;则仅是简单地改变该局部变量的值。如果不存在名为height的局部变量,照此例中的样子,解释器创建一个名为height的电影剪辑变量(非局部变量),并将其值设置为10。作为非局部变量,即使是在该函数结束之后,height仍然持续。再次提醒注意:我多次使用时间轴变量和电影剪辑变量这两个术语,它们是同义词,我此前提到过。
下例示范局部和非局部变量的使用: var x = 5; // new nonlocal variable, x, is now 5 function variableDemo () { x = 10; // nonlocal variable, x, is now 10 y = 20; // new nonlocal variable, y, is now 20 var z = 30; // new local variable, z, is now 30 trace (x + "," + y + "," + z); // send variable values to Output window } variableDemo (); // call our function. displays: 10,20,30 trace (x); // display: 10 (reassignment in our function was permanent) trace (y); // display: 20 (nonlocal variable, y, still exists) trace (z); // display nothing or an "undefined" (local variable, z, has expired)
请注意,某个局部变量和某个非局部变量在同一脚本中共享同一个名字是可能的,但是它们有不同的作用域。不过,我必须得说这非常容易造成混乱并且是极其恶劣的编程行为。下面是这样的例子: var myColor = "blue"; function hexRed () { var myColor = "#FF0000"; return myColor; } trace (hexRed ()); // displays: #FF0000 (the local variable myColor) trace (myColor); // displays: blue (setting the local variable myColor to #FF0000 did not affect the nonlocal version)
上述这些就是有关ActionSctipt中变量的理论知识,如果有不详尽或错误的地方,请指明。 我愿意聆听并感激你的有价值的观点。
出处:蓝色理想
责任编辑:无意
上一页 变量(8)- 电影剪辑变量的生存期 下一页 有关变量的一些实例
◎进入论坛Flash专栏版块参加讨论
|