ActionScript 2.0/函数简介
关键概念
- 函数的定义
- 代码块
- 函数声明
- 函数调用
- 参数
- 返回值
- 命名函数
- 调用者和被调用者
- 变量中的函数
现在我们已经学习了所有运算符,我们可以进入下一部分:函数。
在数学中,一个函数由输入、过程和输出组成。例如,如果将 x = 3 输入到 f(x) = 2x 中,我们得到输出 6。
在计算机中,一个函数是一个语句集合。当一个函数被执行时,函数内部的所有语句都将被执行。一个函数可能或不可能有输入,一个函数可能或不可能有输出。(当然,对于必须有输出的电子表格函数来说,后者是不可能的。)
以下是一个简单的函数,没有输出也没有输入。看看代码,我们会一步一步地解释它
代码 | 结果 |
---|---|
var someNumber:Number = 5;
function addOneToSomeNumber():Void{
someNumber++;
}
|
|
首先,第一条语句是一个简单的变量声明语句,我们之前已经学习过了。
第二行包含各种元素
function
被添加到函数声明的开头,就像var
被添加到变量声明的开头一样。- addOneToSomeNumber 是我们函数的名称。
- 括号用于函数的输入。虽然此函数不涉及输入,但我们仍然必须添加括号。
:Void
部分用于函数的输出。通常,Void
将被输出的数据类型替换。由于此函数不涉及输出,因此我们使用关键字Void
代替。- 左花括号标志着一个代码块的开始。
代码块指的是用一对花括号括起来的语句组。这些语句将按顺序执行。在一个函数中,代码块被称为函数的主体。稍后,我们将学习代码块的其他应用。请记住,我们总是缩进代码块中的语句。这将在 Flash API 中自动为您完成。
为了使用一个函数,我们需要调用它。让我们再看看上面的例子
代码 | 结果 |
---|---|
var someNumber:Number = 5;
function addOneToSomeNumber():Void{
someNumber++;
}
addOneToSomeNumber();
trace(someNumber);
|
|
在上面的函数调用中,我们只是调用了函数 addOneToSomeNumber
。后面的括号用于函数的输入,我们将在下一节中介绍。计算机执行了函数,该函数涉及将 someNumber 增加 1。这就是我们得到结果 6 的方式。
在编程中,函数的输入被称为参数或参数。[1]让我们修改我们的 addOneToSomeNumber 函数以适应将任何数字添加到 someNumber。
代码 | 结果 |
---|---|
var someNumber:Number = 5;
function addAnyNumberToSomeNumber(anyNumber:Number):Void{
someNumber += anyNumber;
}
addAnyNumberToSomeNumber(2);
trace(someNumber);
trace(anyNumber);
|
|
在这个例子中,代码 anyNumber:Number
被放到了括号中。这是函数的输入,写成 变量名:数据类型
。[2]输入后,anyNumber 被称为局部变量。这意味着它不能在函数外部被引用。这就是为什么我们不能在最后跟踪 anyNumber 的原因。
请注意,这不会导致错误,但会返回关键字 undefined
。每当我们尝试引用一个未定义的值时,Flash 将返回 undefined
值。我们将在稍后讨论 undefined
及其孪生兄弟 null
。
要调用函数 addAnyNumberToSomeNumber,我们只需要在括号中放入值。不需要数据类型!
现在让我们修改代码以包含两个输入
代码 | 结果 |
---|---|
var someNumber:Number = 5;
function addTwoNumbersToSomeNumber(firstNumber:Number, secondNumber:Number):Void{
someNumber += firstNumber + secondNumber;
}
addTwoNumbersToSomeNumber(5, 3);
trace(someNumber);
|
|
逗号用于分隔两个参数。这也可以用于三个或更多个参数。
再看看我们的 addAnyNumberToSomeNumber 代码。假设我们不想触碰原始变量,但仍然希望得到 anyNumber 和 someNumber 的总和。这就是带有返回值的函数派上用场的地方。
代码 | 结果 |
---|---|
var someNumber:Number = 5;
function addTwoNumbers(originalNumber:Number, anyNumber:Number):Number{
return (originalNumber + anyNumber);
}
trace(addTwoNumbers(someNumber, 7));
|
|
在这个函数中,someNumber 的值被传递了,但函数没有改变 someNumber,而是直接将 someNumber 和 7 的总和返回给 trace 函数。
请注意,由于此函数只包含一个 return 语句,而不包含其他任何内容,因此将函数作为单独的语句调用是没有意义的
代码 | 结果 |
---|---|
var someNumber:Number = 5;
function addTwoNumbers(originalNumber:Number, anyNumber:Number):Number{
return (originalNumber + anyNumber);
}
addTwoNumbers(someNumber, 7);
|
|
看,什么也没发生!该函数适合返回一个值,但没有其他作用。
还要注意,返回值中的函数可以以多种灵活的方式使用,而不仅仅局限于跟踪。例如,看看下面的代码
代码 | 结果 |
---|---|
var someNumber:Number = 5;
function addTwoNumbers(originalNumber:Number, anyNumber:Number):Number{
return (originalNumber + anyNumber);
}
var yetAnotherNumber:Number = 6 / addTwoNumbers(someNumber, 7);
trace(yetAnotherNumber);
|
|
在这个脚本中,计算机首先计算 addTwoNumbers(someNumber, 7) 的值,它等于 12。然后它执行运算 6 / 12,最后将其赋值给 yetAnotherNumber。
总之,函数声明的语法如下
function functionName(parameter1:DataType1, parameter2:DataType2...):ReturnDataType{ Statements; return value; }
像变量一样,你不能用保留字来命名函数,并且函数只能以字母开头。根据已有的命名约定,好的函数名以动词开头,可以与其他单词使用驼峰式命名法连接起来。例如,eatWatermelon()、drinkWater() 和 smashVase()。
当一个函数被调用时,它被称为被调用者。当一个函数被另一个函数调用时,调用函数被称为调用者。
函数的arguments 对象可以找到调用者和被调用者。以下示例跟踪调用者和被调用者
代码 | 结果 |
---|---|
function uselessFunction():Void{
trace(arguments.caller);
trace(arguments.callee);
}
uselessFunction();
|
|
请注意,由于函数无法以文本形式表示,因此计算机跟踪 [type Function],这只是表示它是一个函数。
如果你真的想,你可以在一个变量中放一个函数。以下是语法
var variableName:Function = function(parameter1:DataType1, parameter2:DataType2...):ReturnDataType{ Statements; return value; }
以下是一个例子
代码 | 结果 |
---|---|
var someFunction:Function = function(someString:String):Void{
trace(someString);
}
someFunction("Hello world!");
|
|
到目前为止,你可能想知道你在哪里获得了 trace
函数,因为你从未在任何地方定义过它。阅读下一章以了解详情!