跳转到内容

ActionScript 2.0/函数简介

来自 Wikibooks,开放世界中的开放书籍
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);

6

在上面的函数调用中,我们只是调用了函数 addOneToSomeNumber。后面的括号用于函数的输入,我们将在下一节中介绍。计算机执行了函数,该函数涉及将 someNumber 增加 1。这就是我们得到结果 6 的方式。

如何声明和调用一个带有输入的函数?

[编辑 | 编辑源代码]

在编程中,函数的输入被称为参数参数[1]让我们修改我们的 addOneToSomeNumber 函数以适应将任何数字添加到 someNumber。

代码 结果
var someNumber:Number = 5;
function addAnyNumberToSomeNumber(anyNumber:Number):Void{
    someNumber += anyNumber;
}
addAnyNumberToSomeNumber(2);
trace(someNumber);
trace(anyNumber);

7
未定义

在这个例子中,代码 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);

13

逗号用于分隔两个参数。这也可以用于三个或更多个参数。

如何声明和调用一个带有输出的函数?

[编辑 | 编辑源代码]

再看看我们的 addAnyNumberToSomeNumber 代码。假设我们不想触碰原始变量,但仍然希望得到 anyNumber 和 someNumber 的总和。这就是带有返回值的函数派上用场的地方。

代码 结果
var someNumber:Number = 5;
function addTwoNumbers(originalNumber:Number, anyNumber:Number):Number{
    return (originalNumber + anyNumber);
}
trace(addTwoNumbers(someNumber, 7));

12

在这个函数中,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);

0.5

在这个脚本中,计算机首先计算 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]
[type Function]

请注意,由于函数无法以文本形式表示,因此计算机跟踪 [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 函数是怎么回事?

[编辑 | 编辑源代码]

到目前为止,你可能想知道你在哪里获得了 trace 函数,因为你从未在任何地方定义过它。阅读下一章以了解详情!

  1. 严格来说,参数指的是要填写的“字段”,而参数指的是参数的值。
  2. 与变量声明类似,对变量进行强类型化并不是必须的,但这是一个好习惯。
华夏公益教科书