FLASH函数的基本概念

2008-04-02 10:57:42来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  函数是在程式中能够重复使用的代码. 您能够将需要处理的值或对象通过参数的形式传递给函数, 然后由函数得到结果. 从另一个角度说, 函数存在目的就是为了简化编程的负担, 减小代码量和提高效率. 而一个写得好的函数, 就像一个"黑箱", 您只要懂得调用他就行了, 而不用去关心他的具体功能是如何实现的

  创建自己的函数---函数定义(Definition)

  要创建一个函数, 就需要有函数的定义. 对于 Actions cript, 就没有什么返回值类型, 形参实参之类的东西好讨论了. 下面是个简单函数的定义:

  //计算矩形面积的函数

  function areaOfBox(a, b) {

  return a*b; //在这里返回结果

  }

  //测试函数

  area = areaOfBox(3, 6);

  trace("area=" area);

  现在来分析一下函数定义的结构. function 关键字说明这是个函数定义, 而不是一段执行代码. 其后便是函数的名称: areaOfBox. 函数名后面的括号内是函数的参数列表(也能够没有参数, 但括号是必须要有的). 紧接着的大括号内是函数的实现代码, 即 Actions cript 语句. 假如函数需要返回值, 能够使用 return 关键字加上要返回的变量名, 表达式或常量名. 在一个函数中能够有多个 return 语句, 但无论何时, 只要执行了其中的任何一个 return 后, 函数便自行终止而不会继续执行下去. 假如没有 return 语句, 则在函数尾最后一个语句执行后结束.

  因为 Actions cript 的特别性, 函数的参数定义并不需要参数类型的声明, 即能够不指定参数类型. 这省去了很多麻烦, 也带来了一些问题. 虽然把上例中倒数第二行改为 area = areaOfBox("3", 6); 也同样能够得到 18 的结果, 但是这对程式的稳定性很不利(假如函数里面用到了 a b 的话, 就会变成字符串的连接运算, 结果自然会出错). 所以, 有时候在函数中类型检查是不可少的.

  在函数体中参变量用来代表要操作的对象. 您在函数中对参变量的操作, 就是对传递给函数的参数的操作. 上例中的 a*b 在您调用函数时会被转化为参数的实际值 3*6 处理.

  --------------------------------------------------------------------------------

  函数更有一种创建方法, 叫做函数显式声明(function literal, 不是通过正式的函数声明而是在一个表达式内通过未命名的函数来进行声明):

  areaOfBox = function(a,b) {return a*b;};

  trace("area=" areaOfBox(2,3));

  这种形式的声明经常用在对象的方法或是函数库的函数声明中.

  在 Flash MX 的帮助中函数定义部分关于这种声明的范例代码有误, 请注意.

  --------------------------------------------------------------------------------

  上面是有返回值的函数, 在函数尾使用了 return 关键字来返回结果. 函数也能够不返回任何值. 如下例:

  //无返回值的函数

  function areaOfBox(a, b) {

  _root.area = a*b;

  }

  //测试函数

  areaOfBox(3, 6);

  trace("area=" _root.area);

  他的结果也是 18, 只但是最后的结果是传递到 _root 下的指定变量 area 而已.下面一个例子更简单:

  //计算矩形面积的函数

  function simpleFunc() {

  trace ("什么都没有"); //在这里返回结果

  }

  //测试函数

  simpleFunc();

  最后的输出就是 trace 中的字符串. 就是说, 函数能够既没有参数也没有返回值, 而是一系列操作的集合. 可见函数的使用具备很高的灵活性.

  --------------------------------------------------------------------------------

  同变量相同, 函数也能够具备全局性. 只要在声明时在前面给他加一个 _global 就能够了:

  //计算矩形面积的全局函数

  _global.areaOfBox = function (a, b) {

  return a*b; //在这里返回结果

  }

  //测试函数

  area = areaOfBox(3, 6);

  trace("area=" area);

  请注意: 在函数体中出现的关键字 this 代表的是调用函数的 MovieClip, 而不是函数体所在的 MovieClip. 这很容易被忽略而产生不期望的结果. 假如要指定 this 所代表的对象就要用到 Function.call() 和 Function.apply() 方法. 在后面的 arguments 对象介绍中会讲到.

  函数参数的检查

  为了确保函数运行的正确性, 我们有时必须检测用户是否给了足够的或是正确类型的参数. 下面是我对上面例子进行改变后的代码:

  //计算矩形面积的全局函数

  _global.areaOfBox = function (a, b) {

  //输出两个参数之和, 用于理解下面的 typeof 语句

  trace("a b=" (a b));

  //检测参数是否足够且类型正确

  if(a==undefined || b==undefined || typeof(a b)!="number") {

  trace("<参数错误>");

  return 0; //返回 0 作为错误时的结果

  }

  return a*b; //在这里返回结果

  }

  //测试函数

  trace("----下面是正确的参数----");

  area = areaOfBox(3, 6);

  trace("area=" area);

  trace("----下面是错误的参数----");

  //这里为了节省篇幅, 我在命令中直接调用函数, 而不是先将返回值赋给一个变量

  //其实这才是我们常用的函数调用方法

  trace("area=" areaOfBox(3, "6"));

  trace("----下面是不足的参数----");

  trace("area=" areaOfBox(3));

  上例中我用 a==undefined 来判断 a 是否被赋值了(即是否已定义, 对于 undefined 数据类型的内容请参阅前一章的内容). 为了确保万无一失, 我还用了 b==undefined 来确保 b 也已被赋值, 中间使用一个逻辑 "或" 运算符 || 来连接这两个条件.

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Flash8中文版安装FlashLite2.0

下一篇: 网页中层或菜单被Flash挡住的解决办法