var so:SharedObject = SharedObject.getLocal("example");
var arr:Array=[1,2,3];
so.data.arr = arr;
so.flush();
trace(so.data.arr); // outputs 1,2,3
arr[2]=5;
trace(so.data.arr); // outputs 1,2,5
如您所见,我仅更新 arr ,但 so.data.arr 也已更新。
如果不是arr [2] = 5,so.data.arr 不会更新;我写arr = [1,2,5];
似乎 arr 和 so.data.arr 以某种方式链接,但只有当我更新arr中的元素时,才会以不同的方式设置整个arr。
我意外地发现了这个。它为什么这样工作?我能算一下它每次都这样有效吗?感谢。
答案 0 :(得分:2)
基本上说数组是通过引用传递的,而不是通过值传递的。这意味着如果您将数组变量分配给另一个,则不会创建新数组。
so.data.arr = arr;
表示so.data.arr
和arr
都指向同一个数组对象。这就是为什么修改任何一个将被另一个反映的原因。他们指着同样的事情。但
arr=[1,2,5];
会使arr
指向其他一些数组对象,请记住[1,2,5]
是new Array(1,2,5)
的简写版本。
这就是为什么在这一行之后他们没有联系到#34;更多。