第3章 ActionScript函数
函数是执行特定任务并可以在程序中重用的代码块。ActionScript 3.0中有两种函数类型:方法和函数闭包。将函数称为方法还是函数闭包取决于定义函数的上下文。如果将函数定义为类定义的一部分或者将它附加到对象的实例,则该函数称为方法。如果以其他任何方式定义函数,则该函数称为函数闭包。
函数在ActionScript中始终扮演着极为重要的角色。因此深入了解函数仍然十分重要,本章将详细讲解如何在ActionScript 3.0中使用函数。
3.1
function函数一定要传值进去吗
3.1.1 问题描述
我原来是搞Java开发的,最近由于工作需要开始着手学习ActionScript。不知道ActionScript中的函数是不是类似于Java中的方法?也不知道它的具体定义和使用方式,哪位高手给我举个例子来说明一下?
3.1.2 解决方法
嗯,是的,ActionScript的函数相当于Java语言中的方法。不过在ActionScript中,创建函数需要使用function关键字。任何指定函数名称,名称后面是一对大括号,大括号之间是函数代码。例如,创建一个简单的函数myName(),并对这个函数进行调用,代码如下所示。
function myName() //定义函数
{
trace("liu");
}
myName(); //调用函数
3.1.3 知识扩展——定义函数
在ActionScript 3.0中可通过两种方法来定义函数:使用函数语句和使用函数表达式。可以根据自己的编程风格(偏于静态还是偏于动态)来选择相应的方法。如果倾向于采取静态或严格模式的编程,则应使用函数语句来定义函数。如果有特定的需求,也可以使用函数表达式来定义函数,函数表达式更多地用在动态编程或标准模式编程中。
1.函数语句
函数语句是在严格模式下定义函数的首选方法。函数语句以function关键字开头,后跟函数名、用小括号括起来的逗号分隔参数列表、冒号(:)、函数类型、用大括号括起来的函数体(即在调用函数时要执行的ActionScript代码)。
例如,下面的代码创建一个定义参数的函数,然后将字符串“hello”用作参数值来调用该函数。
function myParameter(aParam:String)
{
trace(aParam);
}
myParameter("hello"); // hello
2.函数表达式
声明函数的第二种方法就是结合使用赋值语句和函数表达式。函数表达式也称为函数字面值或匿名函数。这是一种较为复杂的方法,在早期的ActionScript版本中广为使用。
函数表达式的赋值语句以var关键字开头,后跟函数名、冒号运算符(:)、指示数据类型的Function类、赋值运算符(=)、function关键字、用小括号括起来的逗号分隔参数列表、用大括号括起来的函数体。
例如,下面的代码使用函数表达式来定义myParameter函数。
var myParameter:Function = function (aParam:String)
{
trace(aParam);
};
myParameter ("hello"); // hello
函数表达式和函数语句的一个重要区别是,函数表达式是表达式,而不是语句。这意味着函数表达式不能独立存在,而函数语句则可以。函数表达式只能用作语句(通常是赋值语句)的一部分。下面的示例显示了一个赋予数组元素的函数表达式。
var myArray:Array = new Array();
myArray [0] = function (aParam:String)
{
trace(aParam);
}
myArray [0]("hello");
3.2
调用外部函数问题
3.2.1 问题描述
各位大侠,我创建了一个用于为数组排序的函数,然后在主程序中调用这个函数。可是实现不了,编写的代码如下所示。
function order(list:Array):array //定义函数
{
for(var i:int=1;i<list.length;i++) //遍历数组
{
var k:int=list[i];
var j:int=i;
while(list[j-1]>k) //开始比较
{
list[j]=list[j-1]; //交换位置
--j;
}
list[j]=k;
}
}
function main()
{
var arr1:Array=new Array(12,4,54,33,47,94);
order(arr1); //调用函数
for(var t:int=0;t<arr1.length;t++)
trace(arr1[t]);
}
请各位大侠帮忙!小弟在此先谢谢了!
3.2.2 解决方法
你的代码本身就是错误的!在你的order()函数中,声明了函数返回的数据类型,却没有return语句。还有就是你的冒泡排序也不对!在你的函数中需要返回重新排序后的数组,冒泡排序也需要修改一下,然后再调用就可以了。请看下面的代码。
function order(list:Array):Array
……