Apache flex Actionscript按引用传递

Apache flex Actionscript按引用传递,apache-flex,actionscript-3,pass-by-reference,Apache Flex,Actionscript 3,Pass By Reference,在上述代码中,控制台上的输出为: 没有任何变化 为什么? 如果createObj的参数是通过引用传递的(这是 actionscript的默认行为),为什么它没有被修改?您没有传递引用。您正在传递分配给局部变量obj的null,以便在函数中使用 : 通过引用传递意味着 只允许引用参数 已传递,而不是实际值。不 制作了实际参数的副本。 而是对变量的引用 作为参数传递时,将创建 分配给局部变量以供使用 在功能范围内 在createObj中,您正在创建一个必须返回的新引用: package {

在上述代码中,控制台上的输出为:
没有任何变化

为什么?

如果createObj的参数是通过引用传递的(这是

actionscript的默认行为),为什么它没有被修改?

您没有传递引用。您正在传递分配给局部变量
obj
null
,以便在函数中使用

:

通过引用传递意味着 只允许引用参数 已传递,而不是实际值。不 制作了实际参数的副本。 而是对变量的引用 作为参数传递时,将创建 分配给局部变量以供使用 在功能范围内

createObj
中,您正在创建一个必须返回的新引用:

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();
}

}
}

您的答案解决了OP的问题,但我想我要补充的是,
null
并没有真正改变这里的工作方式。可惜这些文件写得这么差。文件中的那一整段简直是一团糟,毫无意义。AS在变量(或参数)中存储对对象的引用。引用是指向对象的“链接”,而不是对象本身。引用在传递给函数时被复制;所以它们是按值传递的。AS具有传递值语义(这就是为什么不能直接在中实现经典的“swap”示例)。AS通过value.PS传递引用。下面是一篇很好的文章,解释了按引用传递和按值传递引用之间的区别:。这是关于Java的,但也适用于Actionscript。
public function test1() {
  tmp = createObj();
  if(tmp != null) {
    trace("Hello World!");
  }
}

private function createObj():Object {
  return new Object();
}