Flash AS3.0菜鸟学飞教程:函数之形式参数和实际参数

2016-01-29 12:11 22 1 收藏

Flash AS3.0菜鸟学飞教程:函数之形式参数和实际参数,本例为Flash AS3.0菜鸟学飞系列教程,在上一节中我们初步了解和认识了“函数”的返回语句应用,在本Flash AS3.0代码教程中我们来学习函数之形式参数和实际参数,希望能给对Flash编程感兴趣的朋友们带来帮助~~

【 tulaoshi.com - Flash 】

本系列Flash教程由中国Flash互助课堂专为Flash新手制作,更多教程和练习请点击这里,在这里有系列的教程、练习,并有老师对练习进行点评与指导,欢迎朋友们的光临! 

  本例为Flash AS3.0菜鸟学飞系列教程,在上一节中我们初步了解和认识了“函数”的引用,在本Flash AS3.0教程中我们来学习函数之返回语句,希望能给朋友们带来帮助~~

学习AS3菜鸟起飞吧之—函数(四):形式参数和实际参数

函数的参数是外界与函数内部通信的方法,对于有参函数来说,函数调用时函数有数据传递的关系。

看代码:

//调用函数
max(5,7);
//定义函数
function max(x:int,y:int):int
{
     if(x  y)
     {
           x = x;
      } else {
              x = y;
      }
      return x;
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

如果一个函数有返回值,可使用 return语句,并在定义函数时声明返回值的类型。

上面的代码在函数调用过程中发生了数据传递,先把5和7传递给x和y,再通过比较后返回大的值7,传递给函数max(),所以max(5,7)的值为7。

在定义函数时,括号中的变量称为形式参数(简称形参)。上面定义max()函数时的x和y就是形参。在调用函数时,函数名后面括号中的变量或表达式称为实际参数(简称实参)。如调用max()函数时的5和7。

函数的实参可以是任意数据类型的变量或表达式。

参数对于函数来说是非常重要,一个好的函数其参数应是不多不少。例如,toFixed()函数可以保留小数点的倍数,但它返回的是字符串。下面编写一个返回值是数字的保留小数点的函数:

var a:Number = 2.55555;
//保留两位小数并输出
trace(保留小数点(a,2);
//定义函数
function 保留小数点(a:Number,b:uint):Number
{
    //10的b次方
 var t:uint = Math.pow(10,b);
 //a*t取整后除t并返回
 return Math.round(a*t) / t;
}

保留小数点的函数,需要两个参数,一个代表要保留小数点的数值,一个是保留小数点的位数。

对于形参很多的函数,可用对象来代替,下面函数求两点间的距离,用对象p1代表第一个点的坐标,用p2代表第二点的坐标:

//调用函数并把返回值赋值给变量d
//调用时定义两个对象的属性
var d:Numbet = distance({x:100,y:200},{x:100,y:100});
//输出距离
trace(d);
function distace(p1:Object,p2:Object):Number
{
     var x:Number = p1.x - p2.x;
     var y:Number = p1.y - p2.y;
     var dis:Number = Math.sqrt(x*x + y*y);
    return dis;
}

定义对象一般有"new Object()",的形式,但也可通过"{}"运算符来定义对象,如:“{x:100,y:200}”相当于如下代码:

var obj1:Object = new Object();
obj1.x = 100;
obj1.y = 200;

按值还是按引用来传入参数

函数的参数可以是任何数据类型的变量,数据类型分为简单数据类型和复杂数据类型。

按值传入,那么参数对象会复制一份副本供函数内部操作,参数本身不会受影响,按引用传入,则不复制副本,函数内操作参数对象的引用,会改变参数对象的状态。

在AS3中,所有的参数都是按引用传入的。只不过,简单数据类型是不变对象,传引用和传值的效果一样,所以,如果参数是简单数据类型,可看成是传值,如果参数是复杂数据类型,就是传引用。

对于简单数据类型的参数来说,函数调用开始时,发生了从实参向形参的值传递,函数调用结束时形参并未向实参进行值传递,这种数据传递称为值传递。

看下面的测试程序:见例:值传递
var a:int = 1;
trace("函数调用前,实参a="+a);
test(a);
trace("函数调用后,实参a="+a);
function test(x):void
{
x += 5;
trace("调用函数中,形参x="+x);
}
输出结果为:
函数调用前,实参a = 1
调用函数中,形参x = 6
函数调用后,实参a = 1

从测试结果看调用函数时,形参的值开始时是由实参传递来的值1,加5后变为6,但形参的值以身试法后并没有传递给实参,所以函数调用前后实参的值都是1。

函数调用开始时,发生了从实参向形参的数据传递,函数调用结束时形参也向实参进行数据传递,这种数据传递称为引用传递。

看下面的测试程序:见例:传引用
//建立一个对象
var person:Object = new Object();
//动态创建属性age
person.age = 20;
trace("函数调用前,实参person.age="+person.age);
test(person);
trace("函数调用后,实参person.age="+person.age);
function test(per:Object):void
{
per.age = 10;
//修改对象的age属性
trace("函数调用中,形参per.age="+per.age);
}
测试结果为:

函数调用前,实参person.age=20
函数调用中,形参per.age=10
函数调用后,实参person.age=10

从结果看出,调用函数前后,实参的值发生了变化。实参把值传递给形参后,形参又把改变的值传递给了实参。

在Flash中对象、数组等复杂数据类型变量是以引用传递的方式来传递数据的。

参数的默认值

AS3新增了两个功能,可以在定义参数时给参数一个默认值,而且可以给函数不确定的参数。

在调用函数时,如果给定的实际参数与形式参数的数目不符,将会提示参数数目不匹配的错误。

例如下面的代码形参有两个,而实参只有一个

//错误:1136:参数个数不正确,应为两个
test(1);
function test(x:int,y:int):Boolean
{
    return xy;
}

这里就可使用参数默认值功能,参数默认值的定义形式为:
function 函数名(参数:数据类型=默认值):数据类型
{
}

下面是正确的代码:

test(1);
function test(x:int,y:int=0):Boolean
{
    return xy;
}

在调用函数时,只传递了一个参数,但由于第二个参数有一个0的默认值,实际上是这样调用函数:

test(1,0);

任意数量的参数

在使用trace()函数中可向这个函数传递一到多个任意数据类型的参数。

trace(参数1);
trace(参数1,参数2,参数3);

这种不定数量的参数,在AS3中可以实现,AS3允许给函数设定任意数量的参数:

function 函数名(...参数):数据类型
{
}

"...参数"中的"..."代表任意数量,参数名可以是任意合法的变量名。

任意数量参数的使用:

//调用函数
test();
//定义任意数量参数的函数
function test(...arg):void
{
trace(arg is Array);
}

任意数量的参数意味着可以有0到多个参数,从输出的结果true可以看出。

下面的代码传递3个参数:

test(1,2,3);
function test(...arg):void
{
    trace(arg);
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

输出结果为1,2,3,即输出了数组arg中的所有元素。

使用任意数量的参数要注意一点:如果函数有多个参数,任意数量的参数必须写在最后,否则程序人报错。

来源:https://www.tulaoshi.com/n/20160129/1484971.html

延伸阅读
标签: flash教程
本文由 中国 cao4811 原创,转载请保留此信息! 本系列Flash教程由中国Flash互助课堂专为Flash新手制作,更多教程和练习请 点击这里 ,在这里有系列的教程、练习,并有老师对练习进行点评与指导,欢迎朋友们的光临!  在学习中遇到问题请到 论坛 发贴交流!   AS3.0 类的编写 (不使用库元件) 在上一讲中我们使用...
标签: flash教程
本文由 中国 cao4811 原创,转载请保留此信息! 本系列Flash教程由中国Flash互助课堂专为Flash新手制作,更多教程和练习请 点击这里 ,在这里有系列的教程、练习,并有老师对练习进行点评与指导,欢迎朋友们的光临!  在学习中遇到问题请到 论坛 发贴交流! 更多AS 3.0教程: http://www.jcwcn.com/portal-topic-topicid-2....
标签: flash教程
 AS3.0 含有多个类的AS3类文件 标准的AS3类文件是以".as"为结尾的纯文本文件。一个类文件可以包含一个或多个类定义,甚至可以直接写入一次性执行的语句。AS3中,在package花括号外,可以定义一个或多个Class,不可与文件同名。这些花括号外的类,称为当前类文件的包外类。只有当前类文件中的成员可以访问。 包外类的产生...
标签: flash教程
本文由 中国 cao4811 原创,转载请保留此信息! 本系列Flash教程由中国Flash互助课堂专为Flash新手制作,更多教程和练习请 点击这里 ,在这里有系列的教程、练习,并有老师对练习进行点评与指导,欢迎朋友们的光临!  在学习中遇到问题请到 论坛 发贴交流! 本例为Flash AS3.0菜鸟学飞系列教程,在上一讲中我们学习了含有多个类...
标签: flash教程
本系列Flash教程由中国Flash互助课堂专为Flash新手制作,更多教程和练习请 点击这里 ,在这里有系列的教程、练习,并有老师对练习进行点评与指导,欢迎朋友们的光临! AS3.0实例教程三-打字效果 打字效果也是一个比较老的的效果,没办法本人太笨,想来想去还是觉得用这个效果来熟悉AS3.0的字符串和文本是最好的。 在AS3.0中字符串和...

经验教程

381

收藏

28
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部