arguments 对象
在将参数传递给某个函数时,可以使用 arguments 对象来访问有关传递给该函数的参数的信息。arguments 对象的一些重要方面包括:
■ arguments 对象是一个数组,其中包括传递给函数的所有参数。
■ arguments.length 属性报告传递给函数的参数数量。
■ arguments.callee 属性提供对函数本身的引用,该引用可用于递归调用函数表达式。
在 ActionScript 3.0 中,函数调用中所包括的参数的数量可以大于在函数定义中所指定的参数数量,但是,如果参数的数量小于必需参数的数量,在严格模式下将生成编译器错误。您可以使用 arguments 对象的数组样式来访问传递给函数的任何参数,而无需考虑是否在函数定义中定义了该参数。下面的示例使用 arguments 数组及 arguments.length 属性来输出
传递给 traceArgArray() 函数的所有参数:
function traceArgArray(x:int):void
{
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}
traceArgArray(1, 2, 3);
// 输出:
// 1
// 2
// 3
arguments.callee 属性通常用在匿名函数中以创建递归。您可以使用它来提高代码的灵活性。如果递归函数的名称在开发周期内的不同阶段会发生改变,而且您使用的是arguments.callee(而非函数名),则不必花费精力在函数体内更改递归调用。在下面的函数表达式中,使用 arguments.callee 属性来启用递归:
var factorial:Function = function (x:uint)
{
if(x == 0)
{
return 1;
}
else
{
return (x * arguments.callee(x - 1));
}
}
trace(factorial(5)); // 120
如果您在函数声明中使用 ...(rest) 参数,则不能使用 arguments 对象,而必须使用为参数声明的参数名来访问参数。
还应避免将 "arguments" 字符串作为参数名,因为它将遮蔽 arguments 对象。例如,如果重写traceArgArray() 函数,以便添加 arguments 参数,那么,函数体内对 arguments 的引用所引用的将是该参数,而不是 arguments 对象。下面的代码不生成输出结果:
function traceArgArray(x:int, arguments:int):void
{
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}
traceArgArray(1, 2, 3);
// 无输出
在早期的 ActionScript 版本中,arguments 对象还包含一个名为 caller 的属性,该属性是对当前函数的引用。ActionScript 3.0 中没有 caller 属性,但是,如果您需要引用调用函数,则可以更改调用函数,以使其传递一个额外的参数来引用它本身。
...(rest) 参数
ActionScript 3.0 中引入了一个称为 ...(rest) 参数的新参数声明。此参数可用来指定一个数组参数以接受任意多个以逗号分隔的参数。此参数可以拥有保留字以外的任意名称。此参数声明必须是最后一个指定的参数。使用此参数会使 arguments 对象变得不可用。尽管 ...(rest)参数提供了与 arguments 数组和 arguments.length 属性相同的功能,但是它不提供与arguments.callee 类似的功能。使用 ...(rest) 参数之前,应确保不需要使用arguments.callee。
下面的示例使用 ...(rest) 参数(而非 arguments 对象)来重写 traceArgArray() 函数:
function traceArgArray(... args):void
{
for (var i:uint = 0; i < args.length; i++)
{
trace(args[i]);
}
}
traceArgArray(1, 2, 3);
// 输出:
// 1
// 2
// 3
...(rest) 参数还可与其它参数一起使用,前提是它是最后一个列出的参数。下面的示例修改traceArgArray() 函数,以便它的第一个参数 x 是 int 类型,第二个参数使用 ...(rest) 参数。输出结果将忽略第一个值,因为第一个参数不再属于由 ...(rest) 参数创建的数组。
function traceArgArray(x: int, ... args)
{
for (var i:uint = 0; i < args.length; i++)
{
trace(args[i]);
}
}
traceArgArray(1, 2, 3);
// 输出:
// 2
// 3
分享到:
相关推荐
5. **arguments (rest)**:AS3中的参数集合,rest是可选参数,表示不定数量的参数。 6. **Array**:顶级类,表示一组有序的对象集合,类似于其他语言的数组。 7. **alpha**:透明度属性,用于控制显示对象的透明度...
`arguments`对象提供了一种访问函数所有参数的方式,而`...rest`参数允许你指定一个变量来接收剩余的所有参数。但是,使用`...rest`会使得`arguments`对象不可用。 最后,错误处理机制`try`、`catch`和`finally`块...
函数可以接受不定数量的参数,通过`arguments`对象或`...rest`语法来访问。使用`...rest`时,`arguments`对象不再可用。例如: ```actionscript private function average(...args):void { trace(args[1]); // 访问...
使用`arguments`对象或`...(rest)`符号可以访问函数中的可变参数。`arguments`是一个类数组对象,可以直接通过索引访问。使用`...(rest)`语法创建可变参数列表时,会将剩余参数收集到一个数组中。 12. **错误处理*...
10. **可变参数**:在函数中,使用 `arguments` 对象可以访问所有参数,或者使用 "...(rest)" 符号(如 `...argu`)来接收剩余的参数,但这会导致 `arguments` 对象不可用。 11. **错误处理**:使用 `try-catch-...
通过`arguments`对象,可以访问传递给函数的所有参数,即使它们的数量在函数定义时未知。这为函数设计提供了灵活性,尤其是在参数数量不确定的情况下。 ### 总结 ActionScript 3.0是Flash CS3开发中不可或缺的一...
`arguments` 对象提供了对所有传递给函数的参数的访问。 ```as3 private function average():void { trace(arguments.length); // 参数的数量 trace(arguments[1]); // 第二个参数 } ``` #### 12. 命名空间管理 ...
当函数接受不定数量的参数时,可以使用 `arguments` 对象或 `(rest)` 参数来访问所有参数。 ```as private function average(...args:Number[]):void { trace(args.length); // 输出参数的个数 trace(args[1]); /...
在函数中,如果不知道传入的参数数量,可以使用`arguments`对象或`(rest)`语法来捕获所有参数。 - 使用`arguments`对象时,可以像访问数组一样访问它。 - 使用`(rest)`语法时,需要注意它会使`arguments`对象不可用...
在AS3中,如果一个函数接收未知数量的参数,可以使用`arguments`对象或`(rest)`语法来访问这些参数。需要注意的是,使用`(rest)`语法会导致`arguments`对象不可用。 示例代码如下: ```as private function average...
【可变参数】函数可以使用`arguments`对象访问未指定数量的参数,或者使用`...rest`语法来捕获剩余参数。需要注意的是,一旦使用`...rest`,`arguments`对象将不可用。 【异常处理】`try`和`catch`语句用于捕获和...
同时,使用rest参数后,`arguments`对象将不可用。 12. **异常处理**:`try`、`catch`和`finally`用于处理可能出现的运行时错误。`try`块包含可能抛出异常的代码,`catch`捕获并处理异常,`finally`无论是否发生...
Flex还支持可变数量的函数参数,文档中介绍了两种方式:使用arguments对象和使用"(rest)"符号。需要注意的是,当使用"(rest)"符号定义参数列表时,将无法使用arguments对象。这在处理具有动态数量参数的函数时非常...