引用类型传递参数到底传的是值还是引用


  function setName(obj){
    obj.name="ABC";
    obj=new Object();
    obj.name="BCD";
  }
  var person=new Object();
  setName(person);
  alert(person.name);// ABC


   执行结果是:ABC。实例3与实例2的区别是在函数中又加了2行代码,在给obj对象新加一个属性name并赋值后 又将obj定义成了一个新的对象(new Object()),定义新对象后又name赋上新的值“BCD”。这个时候如果是按引用传递的话,那么最后person对象就会自动修改为指向其 name属性为"BCD"的新对象,但最后显示的却是“ABC”,这说明即使在函数内部修改了参数的值,但原始的引用还保持不变。实际上,当在函数内部 obj=new Object()时 这个新的obj就已经成为函数内部的局部对象了,这个对象会在函数执行完毕后自动销毁。

介于2中类型之间的特殊的字符串类型:
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>基本类型/引用类型--字符串</title>
    <script text="text/javascript">
    //字符串比较特殊,长度不固定应该引用,可是某些行为又像基本类型的
        var a="hello";
        var b=a;//拷贝的引用值--想象成一个指针
        a="你好";//实际上是又建立另外一个字符串"你好"并指向它
        alert(b);//hello
        
        //字符串算是一种不变对象
    </script>
    </head>
    <body>

    </body>
</html>

 

例子1 

 

[javascript] view plaincopy
  1. var a=2;  
  2. var b=a;  
  3. a=3;  
  4. console.log("a:"+a+", b:"+b);  
  5. a:3, b:2  


例子中a,b 仅仅都是基本类型,b是被赋予了2这个值。所以当a改变时,b还是2.


 

例子2:

 

[javascript] view plaincopy
    1. var a=[2,3];  
    2. var b=a;  
    3. a[0]=4;  
    4. console.log("a:"+a+", b:"+b);  
    5. a:4,3, b:4,3 

 

posted @ 2015-05-08 07:26  412650789  阅读(275)  评论(0)    收藏  举报