日期:2013-12-02  浏览次数:20663 次

◆理解函数的目的
◆给函数传递参数
◆理解函数的变量作用域的重要性
◆编写自定义函数
◆从函数前往值
◆用setInterval()创建递归函数
通过使用函数,就可以创建可重用的代码、可读的代码、灵巧的代码。有了函数,就可以写出无效的、结构精巧的、维护得很好的代码,而不是冗长的、笨拙的代码。
一、理解用函数进行编程
函数是一种改造。写代码没有函数,就像出版图书没有印刷机,出版业是如此没有生产力,如此没产量。有了印刷机,只制一次版,就可以从那个版复制出许多副本了。印刷机是一种改造。同样地,如果编程序没有函数,就不得不一次一次地写出代码的每一行。但是,当写出一个函数时,就可以将多条语句封装在一同,就可以反复地调用那个函数(即那些语句的组),而不用反复写相反的代码了。那就巧妙多了。函数是一种组织起一个代码块的方法,该代码块直到从其主流程中调用(直接地或间接地)时才执行。换句话说,函数是一种将调用时才执行(不调用不执行)某个特殊任务的代码块包装在一同的方法。函数比非结构化编程更具优势。这些优势包括:
◆ 通过消弭混乱和冗余的代码,使代码更具有可读性。
◆ 通过反复使用函数而不是每次反复输入整个代码块,使程序愈加无效率。
◆ 函数成为了进行修正的中心点。在函数中做个修正,该修正就能被使用到每个调用该函数的实例中。
◆ 编写成熟的函数可以在许多程序中反复使用。因此,可以开发出一个可被用于建立各种程序的函数库,而不需求每次从打草稿开始写脚本。
◆ 包装在一个函数中的代码提供了进行用户交互的基础。如果没有函数,使用程序就像一个单独的程序那样运转。有了函数,一个用户发起的动作就可以调用一个函数。
二、定义自定义函数
我们曾经知道在ActtionScript代码中使用函数的某些优点了。如今,需求学习如何来写函数。写一个函数也被称为“定义”或“声明”一个函数。函数的语法:
function 函数名(参数):前往数据类型{
  函数体
)
在函数的语法中,要留意如下几个关键点:
◆function关键字通知Flash,正在声明一个函数。当定义一个函数时,必须像上面那样包括function关键字。
◆函数应该恪守变量的命名规则。就像命名变量那样,给函数取一个能表示其功用的名字是一个好想法。
◆所有函数的定义都必须在函数名字后面包括一对圆括号。在圆括号中的“参数”可以没有。在后面可以读到有关参数的更详细的内容。但是,无论一个函数能否定义了参数,都必须在定义中包括一对圆括号。
◆圆括号后面接着就是冒号和一个无效的数据类型名字。数据类型是函数将前往的数据的类型。在后面会看到如何前往数据。使用Void表示该函数不前往值。
◆函数体是由一对开始和结束波浪式大括号({})定义的。
如今曾经知道基本的语法了,那就看一个非常简单的函数例子吧:
function displayGreeting():Void{
  trace("Hello.");
}

三、调用函数
我们将术语“函数”定义为延迟执行的代码块。这就是说,一个函数可以被定义,但直到访问或调用它之前什么也不会发生。可以本人测试一下这一点,即在主时间轴的第1帧中,用如下代码创建一个新的Flash影片:

function displayGreeting():Void{
  trace("Hello.");
}
当测试该影片时会看到,虽然在代码中有一个trace()动作,但什么也没发生。所以,既然知道了如何“定义”函数,就需求学习如何通过“调用”它们而在程序中使用它们。为了调用一个函数,需求使用该函数的名字,并后跟一个圆括号(它被称为“函数调用运算符”)。当调用一个函数时,对函数的调用本身就是一个语句。因此,应该在该语句的后面使用一个分号。下面的例子定义了一个函数,然后调用它。如果想本人学习和测试它,只需将该代码放置在主时间轴的第1帧即可。
function displayGreeting():Void{
  trace("Hello.");
}
displayGreeting();//调用函数
当测试该影片时,在Output窗口中显示如下内容:
Hello.

  四、传递参数
某些函数不需求给它们传递任何信息。例如,前面一节中的dlsplayGreetlng()函数就不需求任何参数。换句话说,许多函数需求给它们传递参数。例如,如果dlsplayGreetlng()函数可以使用不同的姓名来显示特性化的问候,就会使dlsp]ayGreetlng()函数愈加风趣了。有了参数,实现这一点就简单了。把上面的函数修正一下,如下所示:

function displayGreeting(姓名:String):Void{
    trace("Hello."+姓名)
}

一旦用这种方式定义了该函数,就可以调用它了,并给它传递不同的参数值。某些例子如下所示:
displayGreeting("张三");//显示:Hello.张三
displayGreeting("李四");//显示:Hello.李四
在一个函数中,一个参数就是一个变量,当调用该函数时就给变量赋值。就像在displayGreeting()函数中所看到的那样,参数被命名为"姓名",在每次调用该函数的时候就给该参数设置值。当用值"张三"调用该函数时,该变量就被赋予了"张三";当用值"李四"调用该函数时,该变量就被赋予了"李四"。参数(变量)是在函数定义的圆括号中声明的。读者可能留意到了,参数的声明与常规变量的声明类似但略微不同。首先,声明的类似性在于,需求给变量创建一个名字并定义一个数据类型。但是,当声明一个参数时,不需求使用var关键字,也不需求使用分号,并且不能在圆括号中初始化一个参数。下面的代码是不正确地声明参数的例子,将产生错误:

//不能使用var关键字。
function displayGreeting(var 姓名:String):Void{
    trace("Hello."+姓名)
}
//不能使用分号。
function displayGreeting(姓名:String;):Void{
    trace("Hello."+姓名)
}
//不要试着在圆括号中初始化变量。
function displayGreeting(姓名:String="王麻子"):Void{
    trace("Hello."+姓名)
}
如果想在函数中使用多个参数,该怎样办呢?很简单,当定义函数时,可以声明用逗号分隔开的多个参数。同样地,当调用该函数时,可以给它传递多个值,只需简单地用逗号分隔这些值即可。如下是具有多个参数的dlsp]ayGreetlng()函数的例子:
function displayGreeting(姓名:String,体重:Number):Void{
  trace(姓名+"的体重是:"+体重);
}

displayGreeting("张三",50);//显示:张三的体重是:50 ,读者可能留意到了,当开始将越来越多的参数添加到一个函数定义的参数列表中时,代码就开始超出编辑器的边界了。可以在Actions面板中启用自动换行功用。还可以在定义函数时将