参数是否存储为局部变量?

时间:2016-04-06 12:18:43

标签: actionscript-3 flash memory-management flash-cs6

这里非常简单的问题:在内存分配方面,参数被视为局部变量吗?

例如,使用以下两个函数:

function foo(parameter:Number):void
    {
        trace("Parameter =", parameter);
    }

    function bar():void
    {
        var x:Number;
        trace("x is a number", x is Number);
    }

ActionScript是否以同样的方式处理parameterx?它们是否在每次运行函数时都被创建为局部变量,并且将一直存在,直到GC消除它们,或者参数处理方式不同?

1 个答案:

答案 0 :(得分:0)

  

ActionScript是否以同样的方式处理parameterx?是   它们都在每次运行函数时都创建为局部变量,   并且将一直存在直到GC消除它们,或者是   参数处理方式不同?

运行时处理参数的方式与局部变量略有不同,但最后它们都是局部范围,并在函数返回时进行清理。对于所有意图和目的,参数是局部变量。

理解的重点是how arguments passed to functions work in AS3

  

在ActionScript 3.0中,所有参数都通过引用传递,因为   所有值都存储为对象。但是,属于的对象   原始数据类型,包括BooleanNumberintuint和   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"]