函数传值的学习笔记
简单值(基本标量)
总是通过值拷贝来赋予,null,undefined,string,number,boolean.
复制代码
1
复制代码
将简单值当参数传入函数后,因为传入的是原值得拷贝,所以无论在函数里如何变化这个参数,原值依然是原值,不会受影响。
复合值,object(包括array,function,和所有的对象包装器)
复制代码
复制代码
arr1是[1,2,3]的引用,arr1赋值给arr2后,arr2也指向了[1,2,3]。此时arr1和arr2同时指向了同一个数组值,所以arr2中push了一个4进来,在arr1中能得到同步反馈。就好像arr1和arr2住在同一个房间里,谁对房间([1,2,3])做了一点改变,这个改变将同时影响两个人。当arr2=[5,6,7,8]后,再显示arr1和arr2,值不一样了。这也很好理解,arr2现在成了[5,6,7,8]的引用了,相当于自己找了另外一间房间,做出的改变当然不能再影响到另外一个人了。
再来看下面这段代码
复制代码
复制代码
公布正确答案,[1,2,3,4]。为什么不是1314520???
还记得前面举得换房间的例子吗。把arr当参数传入的时候,obj也成了[1,2,3]引用,所以第一次push的4的时候,两者是同在一个房间的,当obj=[13,14]的时候,说明obj找到了一生一世的所爱,到宾馆开房去了,不在同一个房间了,那后来push进来的520,秀恩爱,跟arr已经没有关系了。
一图以蔽之,刚开始两者指向同一个数值值,后来其中一个指向了另一个数组。言情一点说,就是刚开始的时候两个人心向一处([1,2,3]),后来一者见异思迁,心中有了别人([4,5,6]),分手了,相互没关系了,那输出的值肯定不一样呀。
故事到这里本该结束了,可是简单值(就是string,number那群屌丝)表示不服气,为什么同样是当参数传入,复合值可以通过函数改变自身,我们却不可以,难道屌丝就没有逆袭的机会吗?
机会还是要给的,来,请看代码。
复制代码
复制代码
哈哈,简单值想通过函数改变,就得曲线救国,先变成对象的得一部分,然后传入函数,之后再把改变后的值赋值回来。这是我目前能想到的方法。https://www.cnblogs.com/sujianfeng/p/7995545.html