在应用程序中使用变量

在本节中,您将在 ActionScript 的简短代码片断中使用变量。您需要在脚本中声明和初始化变量,然后才能在表达式中使用它。表达式是操作数和运算符的组合,表示一个值。例如,在表达式 i+2 中,i2 是操作数,而 + 是运算符。

如果在表达式中使用变量之前没有对它进行初始化,则变量就处于未定义状态,因而会导致意外结果。有关编写表达式的详细信息,请参阅"语法和语言基础知识"

如果使用未定义的变量(如下例所示),在 Flash Player 7 和更高的版本中,该变量的值将为 NaN,并且您的脚本可能产生意外的结果:

var squared:Number = myNum * myNum;
trace(squared); // NaN 
var myNum:Number = 6;

在下例中,声明和初始化变量 myNum 的语句放在前面,因此 squared 就可以替换为一个值:

var myNum:Number = 6;
var squared:Number = myNum * myNum;
trace(squared); // 36

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

比较向函数传递未定义变量和已定义变量的情形:

  1. 将 Button 组件从"组件"面板拖到舞台上。
  2. 打开"属性"检查器,并在"实例名称"文本框中键入 bad_button
  3. 将下面的代码键入到时间轴中的第 1 帧上。
    // 无法正常工作
    function badClickListener(evt:Object):Void {
        getURL(targetUrl);
        var targetUrl:String = "http://www.adobe.com";
    }
    bad_button.addEventListener("click", badClickListener);
    
  4. 选择"控制">"测试影片",会发现按钮无效(没有打开网页)。
  5. 将另一个 Button 组件拖动到舞台上。选择该按钮。
  6. 打开"属性"检查器,并在"实例名称"文本框中键入 good_button
  7. 将下面的 ActionScript 添加到时间轴中的第 1 帧上(跟在您前面添加的 ActionScript 之后):
    // 有效
    function goodClickListener(evt:Object):Void {
        var targetUrl:String = "http://www.adobe.com";
        getURL(targetUrl);
    }
    good_button.addEventListener("click", goodClickListener);
    
  8. 选择"控制">"测试影片",单击添加到舞台上的第二个按钮。

    该按钮正常打开该 Web 页。

变量包含的数据类型会影响如何以及何时更改变量的值。原始数据类型(例如字符串和数字)是按值进行传递 的,这意味着使用的是变量的当前值,而非对该值的引用。复杂数据类型的例子包括 Array 和 Object 数据类型。

在下例中,将 myNum 设置为 15 并将该值复制到 otherNum 中。当您将 myNum 更改为 30(在代码的第 3 行)时,otherNum 的值仍然是 15,因为 otherNum 不会到 myNum 中查找它的值。otherNum 变量包含它接收到的 myNum 的值(在代码的第 2 行)。

在 ActionScript 中使用变量:

  1. 创建一个新的 Flash 文档,并将它保存为 var_example.fla
  2. 在时间轴中选择第 1 帧,在"动作"面板中键入下面的代码:
    var myNum:Number = 15;
    var otherNum:Number = myNum;
    myNum = 30;
    trace(myNum); // 30
    trace(otherNum); // 15
    

    当您将 myNum 更改为 30(在代码的第 3 行)时,otherNum 的值仍然是 15,因为 otherNum 不会到 myNum 中查找它的值。otherNum 变量包含它接收到的 myNum 的值(在代码的第 2 行)。

  3. 选择"控制">"测试影片",查看"输出"面板中显示的值。
  4. 现在将下面的 ActionScript 添加到第 2 步中添加的代码后面:
    function sqr(myNum:Number):Number {
        myNum *= myNum;
        return myNum;
    }
    var inValue:Number = 3;
    var outValue:Number = sqr(inValue);
    trace(inValue); // 3
    trace(outValue); // 9
    

    在此代码中,变量 inValue 包含一个原始值 3,因此该值会传递给 sqr() 函数,而返回值为 9。变量 inValue 的值不会更改,尽管函数中的 myNum 值会发生更改。

  5. 选择"控制">"测试影片",查看"输出"面板中显示的值。

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

有关按引用传递变量的信息,请参阅按引用传递变量