源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

深入理解JavaScript中的传值与传引用

  • 时间:2020-04-09 17:11 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:深入理解JavaScript中的传值与传引用
[b]1.传值(by value)[/b] 变量的值被复制出一份,与原来的值将不相干,也就是说即使新的值被修改,原来的值也不会改变,在JavaScript中基本类型都是传值的.
[u]复制代码[/u] 代码如下:
function testPassValue() {    var m=1;    var n=2;    //将m,n的值复制一份,传递到passValue    passValue(m,n);    alert(m);  //将是原有的值 } function passValue(a,b) {   a = a+b; //改变a的值,这里a只是原有值的一份copy   alert(a);  }
输出结果: 3 1 [b]2.传引用(by reference).[/b] 引用本身复制一份传给function,引用指向的对象并没有被复制传递(java中也是如此),在function中,如果改变了对象的属性的值,由于和原来的引用指向的是同一个对象,因此在通过原来的引用访问到的将是修改过的值; 但是如果只是在function中将引用指向一个新的对象,将不会改变原对象的值,改变的只是复制的这一份引用.
[u]复制代码[/u] 代码如下:
function testPassValue() {   var date = new Date(2006,02,27);   alert(date.getDate());  //输出为 27   //将date引用本身复制一份,传递到passReference,注意date所指向的对象并没有被复制   passReference(date);   alert(date.getDate());  //输出为12   //同上   changeReference(date);   alert(date.getDate());  //输出还为12 } function passReference(da) {  //由于da和原引用指向的是同一个对象,在function外,通过原有的引用访问到的将是对象的日期属性值,将是修改之后的值.    da.setDate(12); } function changeReference(da) {    //此时da引用实际上是原引用的一份copy,将引用本身重新赋值,将不会影响原引用    da= new Date(2007,05,11); //将da引用指向一个新的对象,此时原引用指向的还是原来的对象    alert(da.getDate());     // 输出为11 }
[b]3 特殊的String  [/b] 在JavaScript中,String也传引用的. js中只有charAt方法,而没有对应的修改方法,和java中的String相同,都具有不变性.
[u]复制代码[/u] 代码如下:
var s1 = "hello"; var s2 = "hell" + "o"; if (s1 == s2)   alert("s1 = s2");  //这句会不会执行? java用的熟的人可能会认为不会执行(这句话我颇有微词,java中也是会执行的!),因为java中的==比较的是同一性. 事实上在js中对String==比较的是值是否相等,所以这句话会执行. 但是对其他的Object == 比较和java中一样是同一性.
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部