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