JavaScript中的传值与传引用

 

1.传值(by value)

变量的值被复制出一份,与原来的值将不相干,也就是说即使新的值被修改,原来的值也不会改变,JavaScript中基本类型都是传值的.

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 

2.传引用(by reference).

引用本身复制一份传给function,引用指向的对象并没有被复制传递(java中也是如此),function,如果改变了对象的属性的值,由于和原来的引用指向的是同一个对象,因此在通过原来的引用访问到的将是修改过的值;

但是如果只是在function中将引用指向一个新的对象,将不会改变原对象的值,改变的只是复制的这一份引用.

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

  

}

 

3 特殊的String  

  JavaScript,String也传引用的. js中只有charAt方法,而没有对应的修改方法,java中的String相同,都具有不变性.

var s1 = "hello";

 

var s2 = "hell" + "o";

 

if (s1 == s2)   

alert("s1 = s2");         //这句会不会执行? java用的熟的人可能会认为不会执行,java中的==比较的是同一性. 事实上在js中对String==比较的是值是否相等,所以这句话会执行. 但是对其他的Object == 比较和java中一样是同一性.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript ,函数参数是按递的,而不是按引用递的。这意味着在函数内部修改参数的不会影响到函数外部的原始。但是,当参数是对象或数组时,递的是对象或数组的引用,因此在函数内部修改对象或数组的属性会影响到函数外部的原始对象或数组。 例如,考虑以下代码: ``` function changeValue(x) { x = 2; } let a = 1; changeValue(a); console.log(a); // 输出 1 ``` 在这个例子,我们定义了一个函数 `changeValue`,它接受一个参数 `x`。当我们调用 `changeValue(a)` 时,函数内部的 `x` 变量被赋为 `2`。然而,由于函数参数是按递的,它并不会影响到外部的 `a` 变量,所以 `console.log(a)` 输出的是 `1`。 现在,让我们考虑一个对象的例子: ``` function changeProperty(obj) { obj.prop = 'new value'; } let myObj = { prop: 'old value' }; changeProperty(myObj); console.log(myObj.prop); // 输出 'new value' ``` 在这个例子,我们定义了一个函数 `changeProperty`,它接受一个对象参数 `obj`。当我们调用 `changeProperty(myObj)` 时,函数内部修改了 `obj` 的 `prop` 属性的为 `'new value'`。由于 JavaScript 对象是按引用递的,这个修改也会影响到外部的 `myObj` 对象,所以 `console.log(myObj.prop)` 输出的是 `'new value'`。 总的来说,JavaScript 的参数递是按递的,但对于对象和数组等引用类型的参数,实际递的是它们的引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值