flash as3.0中传引用和传值是什么意思,请高手用自己的话解释一下。
ActiongScript3.0提到传引用和传值我都弄晕了。唉好像好难理解呀,你们是怎么理解的?求分享在什么情况下是用传引用的???...
ActiongScript3.0提到传引用和传值我都弄晕了。唉 好像好难理解呀,你们是怎么理解的?求分享
在什么情况下是用传引用的??? 展开
在什么情况下是用传引用的??? 展开
展开全部
我来回答这个问题吧,这就涉及到对象的引用问题了,什么是引用?其实在AS3.0中,一切皆引用,只是对象在内存中的存在方式不一样,决定了是值引用还是对象引用的关系,一般来说,基本数据类型比如数字,字符布尔值之类的,都是值引用,值引用的最大特点是不可变的,就是固定值,如果想变化,就得重新创建一个值,而所有相同值都是引用同一个对象.比如var a:uint=5;那么就是先在内存中创建一个5的对象,现在我们这样操作a++;那么现在计算机就又要重新创建了一个对象6用于a的引用.那么这个5如何了呢,如果这个5没有其它对象引用它的话,就符合垃圾回收机制,会自动清除掉的.这是简单数据类型的处理方式,那么复杂数据类型的处理方式就与此不同,复杂数据类型在内存中,不是固定不变的值,它是可变的,因此凡是引用这个复杂数据类型的对象,殾对这个内存中的对象具有可操作性,也就是说,如果两个对象同时指向内存中的同一个对象,那么其中如果有一个修改值,都会影响所有指向它的对象的值,以上的例子就是一个.在var myobj1中,它指向了内存中的{a:123,b :456}现在又有myobj2同样也指向了这个对象,因为是同时指向了一个对象,现在对myobj2进行操作,其实是对内存中的对象{a:123,b:456}进行了操作.自然内存中的对象的值发生了改变,现在内存中的对象值变成了{a:124,b:456}那么因为myobj1指向这个对象,自然myobj1也变成了{a:123,b:456};这是编程中很重要的基础知识,如果这方面你搞不明白,那么将来你要提高编程水平会有很大障碍.希望我的解释对你有用,这也是我的理解.祝你成功.
再补充一下:
var a:uint=5;
var b:uint=a;
b++;
trace(a);
//输出5,因为数字在内存中是常量,为固定值,所以改变b的值是不会改变a的值的.b引用了在内存中新创建的6,而5因为有a在引用,所以内存中现在存在了两个数字对象5和6.现在我们再创建一个对象
var c:uint=5;
这个时候内存中并没新增加一个对象5而是直接引用了原来的5,现在我们来测试一下
trace(a===c);//输出true;
trace(a==c);//输出true;说明内存中并没有新的对象生成.这是基本数据类型在内存中的特点.
其实对引用这个东西,够写一章了,在这里只能写这么多,要是你有不懂的地方,我们可以交流,总之这部分很重要.
再补充一下:
var a:uint=5;
var b:uint=a;
b++;
trace(a);
//输出5,因为数字在内存中是常量,为固定值,所以改变b的值是不会改变a的值的.b引用了在内存中新创建的6,而5因为有a在引用,所以内存中现在存在了两个数字对象5和6.现在我们再创建一个对象
var c:uint=5;
这个时候内存中并没新增加一个对象5而是直接引用了原来的5,现在我们来测试一下
trace(a===c);//输出true;
trace(a==c);//输出true;说明内存中并没有新的对象生成.这是基本数据类型在内存中的特点.
其实对引用这个东西,够写一章了,在这里只能写这么多,要是你有不懂的地方,我们可以交流,总之这部分很重要.
更多追问追答
追问
还能简单的概括一下吗?新手 接受能力有限。。。。
追答
可以告诉你,这个基础知识很重要,你水平越高,对这方面的理解要越透彻,这些都是写得很简略了,要是想写还有很多。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询