package {
import flash.display.Sprite;
public class test1 extends Sprite {
private var tmp:Object;
public function test1() {
createObj(tmp);
if(tmp == null) {
trace("nothing changed");
}
}
private function createObj(obj:Object):void {
obj = new Object();
}
}
}
在上面的代码中,控制台的输出是:
没有改变 为什么呢?
如果传递给createObj的参数是按引用传递的(这是actionscript的默认行为),为什么它没有被修改?
null
在这里并没有真正改变事物的工作方式。文档写得太糟糕了,整个段落都很混乱,几乎没有任何意义。AS将对象的引用存储在变量(或参数)中。引用是指向对象的“链接”,而不是对象本身。当传递给函数时,引用会被复制;因此它们是按值传递的。AS具有按值传递语义(这就是为什么你不能直接在AS中实现经典的“交换”示例)。AS通过值传递引用。 - Juan Pablo Califano