1、在as3中,可以大致把函数分为两类:方法和函数闭包,分类依据是函数定义的上下文。
- 方法
:将函数定义为类的一部分,这个就类似于java中的类的方法。或者将它附加到某类的实例上,动态类有这个功能,其实javascript中也有类似用法。
- 函数闭包
:其它的任何定义方法。和javascript中用的最多的定义方法类似。
2、定义函数的两种方式:函数语句和函数表达式
,javascript中也有,不细说,举两个例子:
//函数语句声明
function fun1():void{}
//函数表达式声明
var fun2:Function = function():void{}
3、在非动态类
中,以函数表达式声明的方法,在严格模式下
是不能用.运算符访问的,但可以用[]访问。
class Test{
var fun1 = function():void{}
}
var t:Test = new Test();
t.fun1(); //严格模式下报错
t["fun1"](); //正确
4、在动态类中
,用函数表达式声明
的方法,是可以用.运算符访问
的。但动态类有一个不好的地方:访问一个动态类实例没有的属性,并不会生成编译器错误。
5、函数语句声明的函数是不能被垃圾回收的;函数表达式声明的函数,当失去对它所有的引用后,就会被垃圾回收。
比如:
当以函数表达式的形式声明一个函数为一个动态类实例的属性,而我们用delete操作符删除这个属性时,我们声明的函数也被回收了。
var t:Test = new Test(); //t是动态类Test的一个实例
t.funt = function(){}; //把一个函数声明为t的一个属性
delete t.funt; //删除刚才新增的函数,我们刚才声明的函数也被回收了
注意:
delete只对对象的属性生效。
所以我们能用它去删除一个用函数语句声明的函数
function fun():void{}
var t:Test = new Test();
t.f = fun;
delete fun; //这个不起作用
delete t.f //这个删除了t的属性f ,但并未删除fun
6、对于函数语句声明的函数,只要在它所在的作用域,不管是在声明代码的前面还是后面都是可以访问的(这个在前面的备忘里说过,as3会把所有的声明提到最前面)。
fun(); //合法
function fun():void{}
fun(); //合法
7、对于函数表达式的函数,只能在它代码之后访问,因为它有一个赋值操作。
fun(); //不合法,由于赋值提前,这时已经知道了fun的存在,但这时并不知道它引用的Function实例。
var fun:Function = function(){};
fun() //合法
8、在as3中的所有参数传递都是引用传递,因为在as3中所有的东西都是对象,但当参数为基元类型时,实现的效果却是值传递。
9、as3实现了默认参数值的功能:
如果在调用具有默认参数值的函数时省略了具有默认值的参数,那么,将使用在函数定义中为该参数指定的值。所有具有默认值的参数都必须放在参数列表的末尾
。指定为默认值的值必须是编译时常量
。如果某个参数存在默认值,则会有效地使该参数成为“可选参数
”。没有默认值的参数被视为“必需的参数
”。(必需的参数,调用时必需传值,不然严格模式下会报编译错误)
例如,下面的代码创建一个具有三个参数的函数,其中的两个参数具有默认值。当仅用一个
参数调用该函数时,将使用这些参数的默认值。
function defaultValues(x:int, y:int = 3, z:int = 5):void
{
trace(x, y, z);
}
defaultValues(1); // 1 3 5
10、在as3中也有arguments
对象,功能基本上和javascript中的一样。
■ arguments 对象是一个数组,其中包括传递给函数的所有参数。
■ arguments.length 属性报告传递给函数的参数数量。
■ arguments.callee 属性提供对函数本身的引用,该引用可用于递归调用函数表达式。
■
避免将 "arguments" 字符串作为参数名,因为它将遮蔽 arguments 对象
11、函数调用中所包括的参数的数量可以大于在函数定义中所指定的参数数量,可以使用 arguments访问所有的参数(使用...Rest参数除外
)。
function traceArgArray(x:int):void
{
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}
traceArgArray(1, 2, 3);
// 输出:
// 1
// 2
// 3
12、...(rest)参数,赞同于java中的可变参数,必须是声明的最后一个参数。注意的还有,在使用此参数的时候,arguments对象就不可用了,也就是不能使用arguments.callee的功能了
。
function traceArgArray(x: int, ... args)
{
for (var i:uint = 0; i < args.length; i++)
{
trace(args[i]);
}
}
traceArgArray(1, 2, 3);
// 输出:
// 2
// 3
13、as3中的函数是对象。当您创建函数时,就是在创建对象,该对象不仅可以作为参数传递给另一个函数,而且还可以有附加的属性和方法。这个和javascript中是一样的。它还有一个名为 length 的只读属性,它用来存储为该函数定义的参数数量。
本文地址:http://kino.iteye.com/blog/238042
,转载请注明,谢谢。
分享到:
相关推荐
web个人日历备忘系统-c#-sql,包括登录,注册,添加和删除编辑备忘。
包含所有网络编程所用到的图表:列出了他们的主要数 asp,php,ruby,css,assiic,html,css,sqlserver,javascript...
javaMD5加密及登录验证(备忘) - Hibernate - Java - ITeye论坛.mhtjavaMD5加密及登录验证(备忘) - Hibernate - Java - ITeye论坛.mhtjavaMD5加密及登录验证(备忘
-我的Linux速查备忘手册-速查
控制台的程序,有可以查看、添加、修改、删除备忘。每次登陆后显示备忘提醒
电脑中的必备品,如有兴趣的可以私下交流,备忘相关事宜。
德国工程师的CANopen备忘录-有书签
网站合作备忘录-知识杂货店.xls
NULL 博文链接:https://ibmtech.iteye.com/blog/722412
第09篇:跨站脚本(XSS)备忘单-2019版1
美国交通设施的六大主要经济事实-汉密尔顿工程 -政策备忘录-2015.5-外文-报告资料.pdf
NULL 博文链接:https://ibmtech.iteye.com/blog/722412
NULL 博文链接:https://ibmtech.iteye.com/blog/722412
微信小程序实现的简易备忘录,可以记录代办事项,可以标记事项是否完成 微信小程序实现的简易备忘录,可以记录代办事项,可以标记事项是否完成 微信小程序实现的简易备忘录,可以记录代办事项,可以标记事项是否完成...
新三板关于员工股权激励计划的备忘录-精品模板文案.docx
这是我刚学android时自己写的一个例子,主要用到了Activity,ContentProvider, BroadcastReceiver三大组件,还有涉及其他知识,我认为刚学android的话挺不错的例子
设计模式专题之(十九)备忘录模式--设计模式备忘录模式示例代码(python--c++)
工作过程中,我们有很多常用的密码、链接等等直接写到.txt备忘录中,便于工作中复制使用,但是缺乏安全性。 在网上下载了几个加密文件,但是都达不到个人的方便为主的需求,所以开发了此应用。 功能介绍: 设置总...
.
.