ActionScript 3.0之函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先我们来看一个最简单的函数: function greet():void {
trace("Hello!How are you?"); }
函数是什么?《殿堂之路》给出这样的解释:函数从外观上看,是一个语句 块,包含着至少一条或数条语句;从逻辑上看,它是可以执行某个目标任务的代 码块。它可以接受外部传入的对象或值,还可以返回操作的结果。函数(Function) 的准确定义是:函数是执行特定任务并可以在程序中重用的代码块。 ActionScript3.0 中函数为分两类:方法(Method)和函数闭包(Function closures)。将函数称为方法还是函数闭包取决于定义函数的上下文。如果您将 函数定义为类定义的一部分或者将它附加到对象的实例,则该函数称为方法。如 果您以其它任何方式定义函数,则该函数称为函数闭包。通过使用函数,就可以 创建可重用的代码、可读的代码、灵巧的代码。有了函数,就可以写出有效的、 结构精巧的、维护得很好的代码,而不是冗长的、笨拙的代码。
函数保留在定义该函数时处于作用域内的任何定义。有关例子后面会讲到。
四、传递参数 (1)、正常传递参数。
某些函数不需要给它们传递任何参数,而许多函数需要给它们传递参数。例 如,如果 greeting() 函数可以使用不同的姓名来显示个性化的问候,就会使 greeting()函数更加有趣了。有了参数,实现这一点就简单了。把上面的函数修 改一下,如下所示: function greeting(names:String):void {
如果要调用没有参数的函数,则必须使用一对空的小括号。例如,可以使用 没有参数的 Math.random() 方法来生成一个随机数: var randomNum:Number = Math.random();
三、定义自定义函数 现在,需要学习如何来写函数。写一个函数也被称为“定义”或“声明”一
个函数。函数有两种定义方式。一种是我们非常熟悉的函数语句定义法 (Function statement);另一种是 ActionScript 特有的函数表达式定义法 (Function expression)。 (1)、首先我们来看一下函数语句定义法: function 函数名(参数 1:参数类型,参数 2:参数类型,……):返回数据类型{
return a+b }; trace(addition(13,67))
平时,应当尽量使用函数语句定义法,这种方法更加标准,也更加简捷。区 别:函数表达式定义法需要先定义、后调用;函数语句定义法可以先调用,后定 义。函数语句定义法定义的函数在编译时会被提升到最前面,而函数表达式定义 法只能先定义再使用,只有定义后面的语句才可以成功调用。 例子: test1();//将这一行移以最后面就能编译成功 test2(); var test1:Function=function():void{
一、理解用函数进行编程 函数是一种革新。写代码没有函数,就像出版图书没有印刷机,出版业是如
此没有生产力,如此没产量。有了印刷机,只制一次版,就可以从那个版复制出 许多副本了。印刷机是一种革新。同样地,如果编程序没有函数,就不得不一次 一次地写出代码的每一行。但是,当写出一个函数时,就可以将多条语句封装在 一起,就可以重复地调用那个函数,而不用重复写相同的代码了,那就巧妙多了。 函数是一种组织起一个代码块的方法,该代码块直到从其主流程中调用(直接地 或间接地)时才执行。换句话说,函数是一种将调用时才执行(不调用不执行)某
ActionScript 3.0 之函数
首先声明这不是我原创的教程。以下内容来源于《殿堂之路》、官方帮助文 档以及网上其他老师的教程,在此我只是根据我学习过程中对函数的理解加以归 纳和整理,很多例子和解释文字都是对其他老师的代码和文字进行了原文的引 用,在些也感谢黑羽老师及其它网络上的老师为 flash 动画所做出的贡献。
} function names():String {
return "新好男人!"; } return (greet() + " " + names()); } trace(greeting());
5
// 输出:hello! 新好男人! 在将嵌套函数传递给外部代码时,它们将作为函数闭包传递,这意味着嵌套
二、调用函数 我们将术语“函数”定义为延迟执行的代码块。这就是说,一个函数可以被
定义,但直到访问或调用它之前什么也不会发生。可以自己测试一下这一点,即 在主时间轴的第 1 帧中,用如下代码创建一个新的 Flash 影片: function greeting():void {
trace("Hello!How are you?"); }
trace("Hello!How are you?"+names); }
一旦用这种方式定义了该函数,就可以调用它了,并给它传递不同的参数值。 例子如下所示: greeting(" 张三"); //显示: Hello!How are you? 张三 greeting(" 李四"); //显示: Hello!How are you? 李四
在一个函数中,一个参数就是一个变量,当调用该函数时就给变量赋值。就 像在 greeting() 函数中所看到的那样,参数被命名为“names”,在每次调用该 函数的时候就给该参数设置值。当用值“张三”调用该函数时,该变量就被赋予 了“张三”;当用值“李四”调用该函数时,该变量就被赋予了“李四”。参数(变 量)是在函数定义的圆括号中声明的。大家可能注意到了,参数的声明与常规变 量的声明相似但略微不同。首先,声明的相似性在于,需要给变量创建一个名字 并定义一个数据类型。但是,当声明一个参数时,不需要使用 var 关键字,也不 需要使用分号。下面的代码是不正确地声明参数的例子,将产生错误: //不能使用 var 关键字。 function greeting(var names:String):void{
1
个特殊任务的代码块包装在一起的方法。函数比非结构化编程更具优势。这些优 势包括: (1) 通过消除混乱和冗余的代码,使代码更具有可读性。 (2) 通过重复使用函数而不是每次重复输入整个代码块,使程序更加有效率。 (3) 函数成为了 AS 进行修改的中心点。在函数中做个修改,该修改就能被应用 到每个调用该函数的实例中。 (4) 编写成熟的函数可以在许多程序中重复使用。因此,可以开发出一个可被用 于建立各种程序的函数库,而不需要每次从打草稿开始写脚本。 (5) 包装在一个函数中的代码提供了进行用户交互的基础。如果没有函数,应用 程序就像一个单独的程序那样运行。有了函数,一个用户发起的动作就可以调用 一个函数。
//函数体 } 例子:定义一个加法函数 function addition(a:int,b:int):int {
return a + b; } trace(addition(2,7)); 在函数的语法中,要注意如下几个关键点: ◆function 关键字告诉 Flash,正在声明一个函数。当定义一个函数时,必须像 上面那样包括 function 关键字。 ◆函数应该遵守变量的命名规则。就像命名变量那样,给函数取一个能表示其功 能的名字是一个好做法。 ◆所有函数的定义都必须在函数名字后面包括一对圆括号。在圆括号中的“参数” 可以没有。在后面我们会讲到有关参数的更详细的内容。但是,无论一个函数是
trace(string) }; myArray[0]("My God");
除此之外,函数语句定义法和函数表达式定义法还体现在函数体中 this 关 键字的记忆上。使用函数语句定义法,则 this 关键字牢牢指向当前函数定义的 域;而若使用函数表达式定义法,则随着函数附着的对象不同,this 关键字也 随之改变。这里不做深入探讨,有兴趣的朋友中以看一下《殿堂之路》,里面有 详细的介绍。 (3)、嵌套函数
//函数体 }
注意:“=”号右边的内容 function 后面没有跟随函数名,这相当于创建 了一个匿名函数对象,并将引用赋值给了左边的函数型变量。这种方法经常被中、 高级编程人员使用,对于初学者掌握住第一种方法就可以了。 例子: var addition:Function=function(a:int,b:int):int {
trace(names+"的体重是:"+weight); } test("张三",50)//显示:张三的体重是:50
有的时候,当开始将越来越多的参数添加到一个函数定义的参数列表中时, 代码就开始超出编辑器的边界了。可以在 Actions 面板中启用自动换行功能。还 可以在定义函数时将每个参数(或参数组)放置到新的一行中。这是一个通常采用 的习惯,因为它能更容易地阅读一个由许多参数组成的函数的参数列表。语法是 相同的,区别仅在于:参数列表中的每个参数都放在新的一行中,以便使它更容 易阅读。例如: function test(names:String,
trace("Hello!How are you?"); } greeting();//调用函数
当测试该影片时,在 Output 窗口中显示如下内容:
2
பைடு நூலகம்
Hello!How are you? 要发送给函数的任何函数参数都括在小括号中。例如,我们经常用到的
trace() 函数,它是 Flash 中的顶级函数: trace("Use trace to help debug your script");
3
否定义了参数,都必须在定义中包括一对圆括号。 ◆圆括号后面接着就是冒号和一个有效的数据类型名字。数据类型是函数将返回 的数据的类型。在后面会讲到如何返回数据。使用 void 表示该函数不返回值。 ◆函数体是由一对开始和结束波浪式大括号({})定义的。 (2)、接着我们再来看一下函数表达式定义法: 函数表达式定义法是 ActionScript 特有的一各定义方式。定义格式如下: var 函数名:Function=function(参数 1:参数类型,参数 2:参数类型,……): 返回数据类型{
trace("Hello."+names) }
6
//不能使用分号。 function greeting(names:String;):void{
trace("Hello."+names) }
在 as3 中可以在圆括号中初始化变量,这是正确的写法,也是与 as2 最大 不同之处。 function greeting(names:String="王麻子"):void {
您可以嵌套函数,这意味着函数可以在其它函数内部声明。除非将对嵌套函 数的引用传递给外部代码,否则嵌套函数将仅在其父函数内可用。例如,下面的 代码在 greeting() 函数内部声明两个嵌套函数: function greeting():String {
function greet():String { return "hello!";
trace("Hello!"+names); }
如果想在函数中使用多个参数,该怎么办呢?很简单,当定义函数时,可以 声明用逗号分隔开的多个参数。同样地,当调用该函数时,可以给它传递多个值, 只需简单地用逗号分隔这些值即可。以下是具有多个参数的 test()函数的例子 function test(names:String,weight:Number):void {
trace("这是函数表达式定义法!") }; function test2():void {
4
trace("这是函数语句定义法!"); }
函数表达式是表达式,而不是语句。这意味着函数表达式不能独立存在,而 函数语句则可以。函数表达式只能用作语句(通常是赋值语句)的一部分。下面 的例子显示了一个赋予数组元素的函数表达式: var myArray:Array=new Array(); myArray[0]=function(string:String){
当测试该影片时会看到,尽管在代码中有一个 trace() 动作,但什么也没 发生。为了调用一个函数,需要使用该函数的名字,并后跟一个圆括号(它被称 为 “函数调用运算符”)。当调用一个函数时,对函数的调用本身就是一个语句。 因此,应该在该语句的后面使用一个分号。下面的例子定义了一个函数,然后调 用它。如果想自己学习和测试它,只需将该代码放置在主时间轴的第 1 帧即可。 function greeting():void {
trace("Hello!How are you?"); }
函数是什么?《殿堂之路》给出这样的解释:函数从外观上看,是一个语句 块,包含着至少一条或数条语句;从逻辑上看,它是可以执行某个目标任务的代 码块。它可以接受外部传入的对象或值,还可以返回操作的结果。函数(Function) 的准确定义是:函数是执行特定任务并可以在程序中重用的代码块。 ActionScript3.0 中函数为分两类:方法(Method)和函数闭包(Function closures)。将函数称为方法还是函数闭包取决于定义函数的上下文。如果您将 函数定义为类定义的一部分或者将它附加到对象的实例,则该函数称为方法。如 果您以其它任何方式定义函数,则该函数称为函数闭包。通过使用函数,就可以 创建可重用的代码、可读的代码、灵巧的代码。有了函数,就可以写出有效的、 结构精巧的、维护得很好的代码,而不是冗长的、笨拙的代码。
函数保留在定义该函数时处于作用域内的任何定义。有关例子后面会讲到。
四、传递参数 (1)、正常传递参数。
某些函数不需要给它们传递任何参数,而许多函数需要给它们传递参数。例 如,如果 greeting() 函数可以使用不同的姓名来显示个性化的问候,就会使 greeting()函数更加有趣了。有了参数,实现这一点就简单了。把上面的函数修 改一下,如下所示: function greeting(names:String):void {
如果要调用没有参数的函数,则必须使用一对空的小括号。例如,可以使用 没有参数的 Math.random() 方法来生成一个随机数: var randomNum:Number = Math.random();
三、定义自定义函数 现在,需要学习如何来写函数。写一个函数也被称为“定义”或“声明”一
个函数。函数有两种定义方式。一种是我们非常熟悉的函数语句定义法 (Function statement);另一种是 ActionScript 特有的函数表达式定义法 (Function expression)。 (1)、首先我们来看一下函数语句定义法: function 函数名(参数 1:参数类型,参数 2:参数类型,……):返回数据类型{
return a+b }; trace(addition(13,67))
平时,应当尽量使用函数语句定义法,这种方法更加标准,也更加简捷。区 别:函数表达式定义法需要先定义、后调用;函数语句定义法可以先调用,后定 义。函数语句定义法定义的函数在编译时会被提升到最前面,而函数表达式定义 法只能先定义再使用,只有定义后面的语句才可以成功调用。 例子: test1();//将这一行移以最后面就能编译成功 test2(); var test1:Function=function():void{
一、理解用函数进行编程 函数是一种革新。写代码没有函数,就像出版图书没有印刷机,出版业是如
此没有生产力,如此没产量。有了印刷机,只制一次版,就可以从那个版复制出 许多副本了。印刷机是一种革新。同样地,如果编程序没有函数,就不得不一次 一次地写出代码的每一行。但是,当写出一个函数时,就可以将多条语句封装在 一起,就可以重复地调用那个函数,而不用重复写相同的代码了,那就巧妙多了。 函数是一种组织起一个代码块的方法,该代码块直到从其主流程中调用(直接地 或间接地)时才执行。换句话说,函数是一种将调用时才执行(不调用不执行)某
ActionScript 3.0 之函数
首先声明这不是我原创的教程。以下内容来源于《殿堂之路》、官方帮助文 档以及网上其他老师的教程,在此我只是根据我学习过程中对函数的理解加以归 纳和整理,很多例子和解释文字都是对其他老师的代码和文字进行了原文的引 用,在些也感谢黑羽老师及其它网络上的老师为 flash 动画所做出的贡献。
} function names():String {
return "新好男人!"; } return (greet() + " " + names()); } trace(greeting());
5
// 输出:hello! 新好男人! 在将嵌套函数传递给外部代码时,它们将作为函数闭包传递,这意味着嵌套
二、调用函数 我们将术语“函数”定义为延迟执行的代码块。这就是说,一个函数可以被
定义,但直到访问或调用它之前什么也不会发生。可以自己测试一下这一点,即 在主时间轴的第 1 帧中,用如下代码创建一个新的 Flash 影片: function greeting():void {
trace("Hello!How are you?"); }
trace("Hello!How are you?"+names); }
一旦用这种方式定义了该函数,就可以调用它了,并给它传递不同的参数值。 例子如下所示: greeting(" 张三"); //显示: Hello!How are you? 张三 greeting(" 李四"); //显示: Hello!How are you? 李四
在一个函数中,一个参数就是一个变量,当调用该函数时就给变量赋值。就 像在 greeting() 函数中所看到的那样,参数被命名为“names”,在每次调用该 函数的时候就给该参数设置值。当用值“张三”调用该函数时,该变量就被赋予 了“张三”;当用值“李四”调用该函数时,该变量就被赋予了“李四”。参数(变 量)是在函数定义的圆括号中声明的。大家可能注意到了,参数的声明与常规变 量的声明相似但略微不同。首先,声明的相似性在于,需要给变量创建一个名字 并定义一个数据类型。但是,当声明一个参数时,不需要使用 var 关键字,也不 需要使用分号。下面的代码是不正确地声明参数的例子,将产生错误: //不能使用 var 关键字。 function greeting(var names:String):void{
1
个特殊任务的代码块包装在一起的方法。函数比非结构化编程更具优势。这些优 势包括: (1) 通过消除混乱和冗余的代码,使代码更具有可读性。 (2) 通过重复使用函数而不是每次重复输入整个代码块,使程序更加有效率。 (3) 函数成为了 AS 进行修改的中心点。在函数中做个修改,该修改就能被应用 到每个调用该函数的实例中。 (4) 编写成熟的函数可以在许多程序中重复使用。因此,可以开发出一个可被用 于建立各种程序的函数库,而不需要每次从打草稿开始写脚本。 (5) 包装在一个函数中的代码提供了进行用户交互的基础。如果没有函数,应用 程序就像一个单独的程序那样运行。有了函数,一个用户发起的动作就可以调用 一个函数。
//函数体 } 例子:定义一个加法函数 function addition(a:int,b:int):int {
return a + b; } trace(addition(2,7)); 在函数的语法中,要注意如下几个关键点: ◆function 关键字告诉 Flash,正在声明一个函数。当定义一个函数时,必须像 上面那样包括 function 关键字。 ◆函数应该遵守变量的命名规则。就像命名变量那样,给函数取一个能表示其功 能的名字是一个好做法。 ◆所有函数的定义都必须在函数名字后面包括一对圆括号。在圆括号中的“参数” 可以没有。在后面我们会讲到有关参数的更详细的内容。但是,无论一个函数是
trace(string) }; myArray[0]("My God");
除此之外,函数语句定义法和函数表达式定义法还体现在函数体中 this 关 键字的记忆上。使用函数语句定义法,则 this 关键字牢牢指向当前函数定义的 域;而若使用函数表达式定义法,则随着函数附着的对象不同,this 关键字也 随之改变。这里不做深入探讨,有兴趣的朋友中以看一下《殿堂之路》,里面有 详细的介绍。 (3)、嵌套函数
//函数体 }
注意:“=”号右边的内容 function 后面没有跟随函数名,这相当于创建 了一个匿名函数对象,并将引用赋值给了左边的函数型变量。这种方法经常被中、 高级编程人员使用,对于初学者掌握住第一种方法就可以了。 例子: var addition:Function=function(a:int,b:int):int {
trace(names+"的体重是:"+weight); } test("张三",50)//显示:张三的体重是:50
有的时候,当开始将越来越多的参数添加到一个函数定义的参数列表中时, 代码就开始超出编辑器的边界了。可以在 Actions 面板中启用自动换行功能。还 可以在定义函数时将每个参数(或参数组)放置到新的一行中。这是一个通常采用 的习惯,因为它能更容易地阅读一个由许多参数组成的函数的参数列表。语法是 相同的,区别仅在于:参数列表中的每个参数都放在新的一行中,以便使它更容 易阅读。例如: function test(names:String,
trace("Hello!How are you?"); } greeting();//调用函数
当测试该影片时,在 Output 窗口中显示如下内容:
2
பைடு நூலகம்
Hello!How are you? 要发送给函数的任何函数参数都括在小括号中。例如,我们经常用到的
trace() 函数,它是 Flash 中的顶级函数: trace("Use trace to help debug your script");
3
否定义了参数,都必须在定义中包括一对圆括号。 ◆圆括号后面接着就是冒号和一个有效的数据类型名字。数据类型是函数将返回 的数据的类型。在后面会讲到如何返回数据。使用 void 表示该函数不返回值。 ◆函数体是由一对开始和结束波浪式大括号({})定义的。 (2)、接着我们再来看一下函数表达式定义法: 函数表达式定义法是 ActionScript 特有的一各定义方式。定义格式如下: var 函数名:Function=function(参数 1:参数类型,参数 2:参数类型,……): 返回数据类型{
trace("Hello."+names) }
6
//不能使用分号。 function greeting(names:String;):void{
trace("Hello."+names) }
在 as3 中可以在圆括号中初始化变量,这是正确的写法,也是与 as2 最大 不同之处。 function greeting(names:String="王麻子"):void {
您可以嵌套函数,这意味着函数可以在其它函数内部声明。除非将对嵌套函 数的引用传递给外部代码,否则嵌套函数将仅在其父函数内可用。例如,下面的 代码在 greeting() 函数内部声明两个嵌套函数: function greeting():String {
function greet():String { return "hello!";
trace("Hello!"+names); }
如果想在函数中使用多个参数,该怎么办呢?很简单,当定义函数时,可以 声明用逗号分隔开的多个参数。同样地,当调用该函数时,可以给它传递多个值, 只需简单地用逗号分隔这些值即可。以下是具有多个参数的 test()函数的例子 function test(names:String,weight:Number):void {
trace("这是函数表达式定义法!") }; function test2():void {
4
trace("这是函数语句定义法!"); }
函数表达式是表达式,而不是语句。这意味着函数表达式不能独立存在,而 函数语句则可以。函数表达式只能用作语句(通常是赋值语句)的一部分。下面 的例子显示了一个赋予数组元素的函数表达式: var myArray:Array=new Array(); myArray[0]=function(string:String){
当测试该影片时会看到,尽管在代码中有一个 trace() 动作,但什么也没 发生。为了调用一个函数,需要使用该函数的名字,并后跟一个圆括号(它被称 为 “函数调用运算符”)。当调用一个函数时,对函数的调用本身就是一个语句。 因此,应该在该语句的后面使用一个分号。下面的例子定义了一个函数,然后调 用它。如果想自己学习和测试它,只需将该代码放置在主时间轴的第 1 帧即可。 function greeting():void {