您必须在脚本中声明变量,然后才能在表达式中使用它。如果使用未声明的变量(如以下示例所示),该变量的值将是 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。因为该数组是按引用进行传递的,所以该函数可以修改它。