DFdou's Blog Life is short,Be yourself.

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:话说昨天在网上看到一个如何让字符串变成传引用的求助帖,我才发现原来数组是传的引用,唉,我太弱了……

Some Related Posts

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

:zhuang :xizao :wuwu :wenhao :wc :touxiang :shuaya :shuajian :shengtian :paopao :no :meinv :maonv :loveu :leilei :kua :jrjr :dahan :chi :chaocai :byebye


CommentLuv Enabled

No trackbacks yet.