钓鱼方法钓鱼技巧钓鱼攻略钓鱼秘籍钓鱼装备,尽在渔夫子

关于变量

变量
变量 是包含信息的容器。容器本身始终不变,但内容可以更改。相当于现实生活中咱们吃饭用的碗,碗可以用来装饭,也可以用来装水,变量本身对应的是计算机中一段内存地址。
var A=3;这里的变量A就相当于碗,数字3就相当于饭或者是水。

当首次定义变量时,最好为该变量指定一个已知值。这就是所谓的初始化变量,而且通常在 SWF 文件的第一帧中完成。初始化变量有助于在播放 SWF 文件时跟踪和比较变量的值。

变量的命名

它不能是关键字或动作脚本文本,例如 true、false、null 或 undefined。
它在其范围内必须是唯一的

此外,您不应将动作脚本语言中的任何元素用作变量名称;这样做可能会导致语法错误或意外的结果。例如,如果您将一个变量命名为 String,然后尝试使用 new String() 创建一个 String 对象,则这一新对象是未定义的。

hello_str = new String();
trace(hello_str.length); // 返回 0

String = "hello"; // 为变量提供与内置类相同的名称
hello_str = new String();
trace(hello_str.length); // 返回未定义

确定变量的范围和声明变量

变量的范围 是指变量在其中已知并且可以引用的区域。在动作脚本中有三种类型的变量范围:

本地变量(私有变量):在声明它们的函数体(由大括号界定)内可用。
时间轴变量:可用于该时间轴上的任何脚本。
全局变量和函数对于文档中的每个时间轴和范围均可见。

本地变量

若要声明本地变量,请在函数体内部使用 var 语句。本地变量的使用范围只限于它的代码块,它会在该代码块结束时到期。没有在代码块中声明的本地变量会在它的脚本结束时到期。
例如,变量 i 用作循环计数器。在下面的示例中,i 用作本地变量;它只存在于函数 test() 的内部:
function test(){
for( i = 0; i <7; i++ ) {
trace(i);
}
}
.
.
.
.
test();
当test()函数执行完毕之后变量i也随之释放它所占据的内存空间,实际上当我在定义函数test()时,计算机并不给变量i分配空间,只有当程序调用函数时,计算机才动态的给变量i分配内存空间。

本地变量也可防止出现名称冲突,名称冲突可能会导致应用程序出现错误。例如,如果使用 name 作为本地变量,则可以用它在一个上下文中存储用户名,而在另一个上下文中存储影片剪辑实例名称;因为这些变量是在不同的范围中运行的,所以它们不会有冲突。

在函数体中使用本地变量是一个很好的习惯,这样该函数可以充当独立的代码。本地变量只有在它自己的代码块中才是可更改的。如果函数中的表达式使用全局变量,则在该函数以外也可以更改它的值,这样也更改了该函数。

时间轴变量

时间轴变量可用于该时间轴上的任何脚本。要声明时间轴变量,应在该时间轴中的所有帧上都初始化这些变量。应确保首先初始化变量,然后尝试在脚本中访问它。例如,如果将代码 var x = 10; 放置在第 20 帧上,则附加到第 20 帧之前的任何帧上的脚本都无法访问该变量。

全局变量
全局变量和函数对于您的文档中的每一时间轴和范围而言都是可见的。若要创建具有全局范围的变量,请在变量名称前使用 _global 标识符,并且不使用 var = 语法。例如,以下代码创建全局变量 myName:

var _global.myName = "George"; // 语法错误
_global.myName = "George";

但是,如果您使用与全局变量相同的名称初始化一个本地变量,则在处于该本地变量的范围内时对该全局变量不具有访问权限:

_global.counter = 100;
counter++;
trace(counter); // 显示 101
function count(){
for( var counter = 0; counter <= 10 ; counter++ ) {
trace(counter); // 显示 0 到 10
}
}
count();
counter++;
trace(counter); // 显示 102

在程序中使用变量

您必须在脚本中声明变量,然后才能在表达式中使用它。如果使用未声明的变量(如以下示例所示),该变量的值将是 NaN 或 undefined,并且您的脚本可能产生意外的结果:

var squared = x*x;
trace(squared); // NaN
var x = 6;

在下面的示例中,声明变量 x 的语句必须排在第一,这样 squared 就可以替换为一个值:

var x = 6;
var squared = x*x;
trace(squared); // 36

当您将未定义的变量传递给方法或函数时,将出现类似的行为:

getURL(myWebSite); // 无动作
var myWebSite = "http://www.macromedia.com";

var myWebSite = "http://www.macromedia.com";
getURL(myWebSite); // 浏览器显示 www.macromedia.com

在一个脚本中,可以多次更改变量的值。变量包含的数据类型会影响如何以及何时更改变量。原始数据类型(例如字符串和数字)是按值进行传递的。这意味着变量的实际内容会传递给变量。

在下面的示例中,x 设置为 15,该值会复制到 y 中。在第 3 行中将 x 的值更改为 30 后,y 的值仍然为 15,这是因为 y 并不会参照 x 来改变它的值;它的值为在第 2 行中接收到的 x 的值。

var x = 15;
var y = x;
var x = 30;

又例如,变量 inValue 包含一个原始值 3,因此实际的值会传递给 sqrt() 函数,而返回值为 9:

function sqrt(x){
return x * x;
}

var inValue = 3;
var out = sqrt(inValue);

变量 inValue 的值不会更改。

对象数据类型可以包含大量和复杂的信息,所以属于此类型的变量并不包含实际的值;它包含的是对值的引用。这种引用类似于指向变量内容的别名。当变量需要知道它的值时,该引用会查询内容,然后返回答案,而无需将该值传递给变量。

下面是按引用进行传递的示例:

var myArray = ["tom", "josie"];
var newArray = myArray;
myArray[1] = "jack";
trace(newArray);

上面的代码创建了一个名为 myArray 的数组对象,它包含两个元素。然后创建了变量 newArray,并向它传递了对 myArray 的引用。当 myArray 的第二个元素变化时,它将影响引用它的每个变量。trace() 动作会向“输出”面板发送 tom, jack。

在下面的示例中,myArray 包含一个数组对象,因此它会按引用传递给函数 zeroArray()。zeroArray() 函数会更改 myArray 中的数组的内容。

function zeroArray (theArray){
var i;
for (i=0; i < theArray.length; i++) {
theArray[i] = 0;
}
}

var myArray = new Array();
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;
zeroArray(myArray);

函数 zeroArray() 会将数组对象作为参数来接受,并将该数组的所有元素设置为 0。因为该数组是按引用进行传递的,所以该函数可以修改它。
标签:flash
分类:生活点滴| 发布:渔夫子| 查看: | 发表时间:2006-2-7
原创文章如转载,请注明:转载自渔夫子 http://www.yufuzi.net/
本文链接:http://www.yufuzi.net/post/flash_3.html

相关文章

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。