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
,转载请注明,谢谢。
分享到:
相关推荐
import tkinter as tk from tkinter import messagebox root = tk.Tk() root.title("简易备忘录") ``` 接下来,我们可以设计窗口的布局。使用`tk.Frame`创建框架,用于放置不同的组件,如文本输入框、按钮等。例如...
### Delphi7使用备忘知识点总结 #### 一、安装QuickReport组件与Socket组件 **知识点1:安装QuickReport组件** - **步骤说明**: - 打开Delphi7 IDE。 - 选择菜单栏中的`Component` -> `Install Packages`。 - ...
3. **函数** - 定义函数:使用`def`关键字,参数传递可以是位置参数、关键字参数或默认参数。 * lambda表达式:创建匿名函数,如`lambda x, y: x + y`。 * 递归:函数调用自身,解决分治问题。 - 匿名函数与高阶...
在AS3中,可以使用静态私有构造函数和公共静态方法来实现。 2. **工厂模式**:定义一个创建对象的接口,让子类决定实例化哪个类。AS3中,可以使用接口和抽象工厂类来实现,允许动态切换产品类型。 3. **抽象工厂...
= 3 GROUP BY species HAVING AVG(age) > 3 ORDER BY AVG(age) DESC; ``` - **多表查询**: - 若要查询多个表的信息,可以使用`JOIN`操作,例如: ```sql SELECT city.name, country.name FROM city INNER JOIN...
### Flex中的小技巧备忘 在Flex开发过程中,掌握一些实用的小技巧可以帮助开发者更高效地完成项目,并提高代码质量。本文将详细介绍四种与Flex相关的实用技巧。 #### 技巧一:复制文本到剪贴板 在某些场景下,...
- 访问倒数第三个元素:`my_list[-3]` - **列表切片**:可以通过切片来获取列表的一部分或复制整个列表。 - 获取第二个到第三个元素:`my_list[1:3]` - 获取从第二个到最后一个元素:`my_list[1:]` - 获取从第一...
**反向壳备忘单详解** 在网络安全领域,特别是渗透测试和红队操作中,反向壳(Reverse Shell)是一种常用的技巧,它允许攻击者在目标系统上建立一个后门,以便远程控制受害主机。本备忘单将深入探讨反向壳的概念、...
本备忘录将主要聚焦于Tkinter库,它是Python的标准GUI库,适用于初学者和快速原型开发。 **1. Tkinter库介绍** Tkinter是Python的默认GUI库,基于Tcl/Tk库。它提供了一系列小部件,如按钮、文本框、标签、菜单等,...
- **导入模块**:使用`import`语句导入模块,如`import math`,可以使用`as`关键字重命名,如`import math as m`。 - **标准库**:如`os`(操作系统接口)、`sys`(系统相关)、`random`(随机数)等。 - **第三...
这份备忘单旨在帮助初学者快速掌握Python的基础知识。 1. **变量与数据类型** - 变量:在Python中,你可以直接赋值创建变量,如`name = "Alice"`。Python有多种数据类型,包括字符串(str)、整数(int)、浮点数...
例如,`w`就是一个共享变量,其初始值通过`numpy.asarray`创建,并且可以被`function`的`updates`参数所改变。共享变量不能直接作为`function`的输入,但可以参与计算。 当我们定义`function`时,输入参数列表只能...
3. 时间与提醒:处理日期和时间,设置提醒功能。Python的`datetime`模块提供了丰富的日期和时间操作。 4. 命令行接口:如果选择CLI,Python的`argparse`库可以帮助处理命令行参数。 现在,我们将逐步解析这些部分...
本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘 函数的参数 对于参数值,JavaScript不会进行类型检查,任何类型的值都可以被传递给参数。 对于函数参数,如果过少,没得到值的参数值为undefined,...
### **3. 列表与元组** - **操作方法** - list.append():添加元素到列表末尾 - list.extend():将列表与另一个列表拼接 - list.insert():在指定位置插入元素 - list.remove():删除指定元素 - list.pop():...
Function Factorial(n As Integer) As Long If n = 0 Then Factorial = 1 Else Factorial = n * Factorial(n - 1) End If End Function ``` 这里的终止条件是`n = 0`,递归步骤是`Factorial(n - 1)`。 3. ...
3. **别名与字段名冲突**: 在存储过程中,定义的别名不能与字段名相同,即使编译通过,在运行时也会出现错误。 4. **处理NULL值**: 存储过程中需要特别注意对NULL值的处理,避免出现意外的结果。 #### 八、Java调用...
3. **避免“no data found”异常**:在使用`SELECT INTO`时,需确保目标表中存在匹配的数据,否则应采取措施处理“no data found”异常。 4. **别名与字段名称区分**:在存储过程中,字段别名不能与字段名相同,这...
#### 三、Oracle存储过程的若干问题备忘 **1. 数据表别名的使用** - **注意**: 在Oracle中,数据表别名不能使用关键字`AS`来指定。 **2. SELECT INTO语句的使用** - **要求**: 使用`SELECT INTO`时,必须确保...