www.nangeblog.com

一斛酒 品人生沉浮 平常心 造万千世界 人生天地之间 若白驹之过隙 忽然而已

posts - 78,comments - 104,trackbacks - 0

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中一样是同一性.

 

 

posted on 2006-02-27 01:41 南哥 阅读(1265) 评论(4)  编辑  收藏 所属分类: AJAX

FeedBack:
# re: JavaScript中的传值与传引用
2006-03-13 18:24 | 将星泪
不错,说得让人\容易理解, 顶一个
  回复  更多评论
  
# re: JavaScript中的传值与传引用
2007-06-05 16:51 | Malcolm Shen
var s1 = "hello";
var s2 = "hell" + "o";

if (s1 == s2)

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


看来楼主java没用熟,恰恰相反,java用熟的人会认为这句会执行。java有常量池的概念,像这样的情况,s1 == s2 是成立的。  回复  更多评论
  
# re: JavaScript中的传值与传引用[未登录]
2007-06-06 12:53 | 南哥
的确如此,多谢指教,这里没考虑到  回复  更多评论
  
# re: JavaScript中的传值与传引用[未登录]
2008-05-30 21:49 | Canca Torvals
@Malcolm Shen
错了吧!!是不会执行的吧!  回复  更多评论
  

标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-02-27 11:36 编辑过
 
 
相关链接:
网站导航: