1911/090
Flash-数组作为函数参数时传的是引用
老实说,一直没有发现数组作为实参传递时传的是数组本身的引用,也就是实际地址。如此一来在函数操作的过程中,会直接改变原数组的值,有些场合可能需要这么做,而有些时候可能就不需要。
撇开直接修改的部分不谈,如何避免修改到原数组的值呢?方法应该有很多,简单的做法就是clone一个数组,来点代码吧:
var ary_test:Array=[1,2,3,4,5];
function arrayChange(ary:Array){
var ary_tmp:Array=arrayClone(ary);
ary_tmp.push("end");
trace(ary_tmp);
}
function arrayClone(ary:Array):Array{
var ary_tmp:Array=[];
ary_tmp=ary_tmp.concat(ary);
return ary_tmp;
}
arrayChange(ary_test);
trace(ary_test);
/*output:
1,2,3,4,5,end
1,2,3,4,5*/
ary_test数组有[1,2,3,4,5]5个元素,如果直接arrayChange(ary_test)而不var ary_tmp:Array=arrayClone(ary)再对ary_tmp进行push操作,那ary_test的值会直接被修改,最后变成[1,2,3,4,5,end]。加上一个var ary_tmp:Array=arrayClone(ary)的操作,这样ary_tmp就是另一个Object了,和ary_test的内存地址不是一个位置,这样可以完整的保存一个原始数组。
PS:话说昨天在网上看到一个如何让字符串变成传引用的求助帖,我才发现原来数组是传的引用,唉,我太弱了……