这里非常简单的问题:在内存分配方面,参数被视为局部变量吗?
例如,使用以下两个函数:
function foo(parameter:Number):void
{
trace("Parameter =", parameter);
}
function bar():void
{
var x:Number;
trace("x is a number", x is Number);
}
ActionScript是否以同样的方式处理parameter
和x
?它们是否在每次运行函数时都被创建为局部变量,并且将一直存在,直到GC消除它们,或者参数处理方式不同?
答案 0 :(得分:0)
ActionScript是否以同样的方式处理
parameter
和x
?是 它们都在每次运行函数时都创建为局部变量, 并且将一直存在直到GC消除它们,或者是 参数处理方式不同?
运行时处理参数的方式与局部变量略有不同,但最后它们都是局部范围,并在函数返回时进行清理。对于所有意图和目的,参数是局部变量。
理解的重点是how arguments passed to functions work in AS3。
在ActionScript 3.0中,所有参数都通过引用传递,因为 所有值都存储为对象。但是,属于的对象 原始数据类型,包括
Boolean
,Number
,int
,uint
和String
,有特殊的操作符,使它们表现得像它们一样 通过价值传递。所有其他对象 - 即不属于基元的对象 数据类型 - 始终通过引用传递,这使您能够 更改原始变量的值。
换句话说:
function test(primitive:int, complex:Array):void {
primitive = 1;
complex.push("foo");
}
var i:int = 0;
var a:Array = [];
test(i, a);
trace(i); // 0
trace(a); // ["hi"]