ActionScript 3.0/函数介绍
注意:此页面仍然是关于 AS2 的。它尚未完全升级到 AS3。 |
关键概念
- 函数定义
- 函数声明
- 函数调用
- 参数
- 返回值
- 命名函数
- 调用者和被调用者
- 变量中的函数
现在我们已经学习了所有运算符,我们可以进入下一部分:函数。
在数学中,函数由输入、过程和输出组成。例如,如果将 x = 3 输入到 f(x) = 2x 中,我们将得到输出 6。
在计算机中,函数是一组语句。当执行一个函数时,函数内部的所有语句都将被执行。函数可以有或没有输入,也可以有或没有输出。(当然,后一种说法不能用于电子表格函数,因为电子表格函数必须有输出。)
有几种类型的函数
- 构造函数,正如我们之前所讨论的,初始化和实例化一个对象。
- 实例方法是属于对象实例的方法。
- 静态方法是属于类本身的方法,而不是属于单个对象。
- 全局函数属于包。
- 顶层函数是特殊的函数,可以在程序的任何地方访问。你无法创建自己的顶层函数。
- 此外,一些函数只是存储在变量中。
我们将在下面的文本中讨论每种类型的函数。首先,我们需要学习如何构造和“调用”函数。
这是一个没有输出和输入的简单函数。看看代码,我们会一步一步地解释它
private var someNumber:Number = 5;
private function addOneToSomeNumber():void{
someNumber++;
}
首先,第一条语句是一个简单的变量声明语句,我们之前已经学习过了。
第二行有各种元素
function
被添加到函数声明的开头,就像var
被添加到变量声明的开头一样。- addOneToSomeNumber 是我们函数的名称。
- 括号用于函数的输入。虽然这个函数不涉及输入,但我们仍然需要添加括号。
:void
部分用于函数的输出。通常,void
将被输出的数据类型替换。由于此函数不涉及输出,因此我们使用关键字void
代替。- 左花括号标记着块的开始。
第二行称为函数的签名。它包含有关函数的重要信息。
现在让我们触发或调用函数
public function Main():void{
//...
addOneToSomeNumber();
//The value of someNumber is now 6.
addOneToSomeNumber();
//The value of someNumber is now 7.
}
如你所见,要调用一个函数,只需键入函数标识符,后面跟着一对括号。
在编程中,函数的“字段”称为参数,通过参数传递的值称为参数。让我们修改我们的 addOneToSomeNumber 函数,以适应将任何数字添加到 someNumber。
private var someNumber:Number = 5;
private function addAnyNumberToSomeNumber(anyNumber:Number):Void{
someNumber += anyNumber;
}
在这个例子中,代码 anyNumber:Number
被放入了括号中。这是函数的输入,写成 变量名:数据类型
。一旦输入,anyNumber 自动成为局部变量。
要调用函数 addAnyNumberToSomeNumber,我们只需要将值放入括号中。不需要数据类型!
public function Main():void{
//...
//The original value of someNumber is 5.
addAnyNumberToSomeNumber(4);
//The value of someNumber is now 9.
addAnyNumberToSomeNumber(2);
//The value of someNumber is now 11.
}
这是否给你一种似曾相识的感觉?应该!还记得我们看到的第一个类中的这些行吗?
removeEventListener(Event.ADDED_TO_STAGE, init);
trace(HELLO_WORLD);
trace("Your name is " + name + ".");
它们都是函数调用!trace 是一个顶层函数,它在输出窗口中输出一个字符串。它对于调试非常有用,并且仅在调试版本中可用。
现在让我们修改我们的代码以包含两个输入
private var someNumber:Number = 5;
private function addTwoNumbersToSomeNumber(firstNumber:Number, secondNumber:Number):Void{
someNumber += firstNumber + secondNumber;
}
public function Main():void{
//...
//The original value of someNumber is 5.
addAnyNumberToSomeNumber(4, 3);
//The value of someNumber is now 12.
addAnyNumberToSomeNumber(1, 2);
//The value of someNumber is now 15.
}
逗号用于分隔两个参数。这也可以用于三个或更多参数。
再看看我们的 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; }
为了使用函数,我们需要调用它。让我们再看一遍上面的例子
代码 | 结果 |
---|---|
var someNumber:Number = 5;
function addOneToSomeNumber():Void{
someNumber++;
}
addOneToSomeNumber();
trace(someNumber);
|
|
在上面的函数调用中,我们只是调用了函数 addOneToSomeNumber
。它后面的括号用于函数的输入,我们将在下一节中介绍。计算机执行了该函数,其中包括将 someNumber 增加 1。这就是我们得到结果 6 的方式。
像变量一样,您不能将保留字用于函数,并且函数只能以字母开头。根据已建立的命名约定,好的函数名以动词开头,可以使用驼峰命名法与其他单词连接。例如,eatWatermelon()、drinkWater() 和 smashVase()。
当调用函数时,它被称为被调用者。当一个函数被另一个函数调用时,调用函数被称为调用者。
函数的arguments 对象可以找到调用者和被调用者。以下示例跟踪调用者和被调用者
代码 | 结果 |
---|---|
function uselessFunction():Void{
trace(arguments.caller);
trace(arguments.callee);
}
uselessFunction();
|
|
请注意,由于函数不能以文本形式表示,因此计算机跟踪[类型 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
函数,因为您从未在任何地方定义过它。阅读下一章以了解更多信息!