javascript参数传址与传值

王朝html/css/js·作者佚名  2008-08-06
窄屏简体版  字體: |||超大  

一直认为javascript函数的参数是普通的传值,对象的传址.

今天想把一个对象传到函数里面去重新生成后传出来,才知道我还是有地方理解错了.

先看http://beba-brook.blogspot.com/2006/06/vs.html的一段代码:

<html>

<body>

<script>

/*函數宣告

*********************/

function FuncA(num,bool){//測試數值和布林

num++;

bool=false;

document.write("在函數FuncA中的變數num值為:"+num+";變數bool值為"+bool+"<br/>");

}

function FuncB(str,man){//測試字串和物件

str="骷髏紳士";

man.name="劍俠鼻唄";

document.write("呼叫FuncB時:"+str+";"+man.name+"<br/>");

}

/*測試

*********************/

var num=1; //數值

var bool=true; //布林

var str="布魯克"; //字串

var man=new Object(); //物件

man.name="布魯克";

document.write("呼叫FuncA前,變數num的值為:"+num+"。變數bool的值為

:"+bool+"<br/>");

FuncA(num,bool);

document.write("呼叫FuncA後,變數num的值為:"+num+"。變數bool的值為

:"+bool+"<br/>");

document.write("呼叫FuncB前:"+str+"。"+man.name+"<br/>");

FuncB(str,man);

document.write("呼叫FuncB後:"+str+"。"+man.name+"<br/>");

</script>

</body>

</html>

运行结果没问题,与我想象的一样:

呼叫FuncA前,變數num的值為:1。變數bool的值為:true

在函數FuncA中的變數num值為:2;變數bool值為false

呼叫FuncA後,變數num的值為:1。變數bool的值為:true

呼叫FuncB前:布魯克。布魯克

呼叫FuncB時:骷髏紳士;劍俠鼻唄

呼叫FuncB後:布魯克。劍俠鼻唄

但,如果在FuncB中加一句

str="骷髏紳士";

man=new Object();

man.name="劍俠鼻唄";

结果:

呼叫FuncB前:布魯克。布魯克

呼叫FuncB時:骷髏紳士;劍俠鼻唄

呼叫FuncB後:布魯克。布魯克

新的man对象并没有返回来.

所以,我现在要这样理解,javascript都是拷贝值的,只是对象拷贝的是对象的地址,所以通过地址引用,可以修改其中的属性.但如果在程序内部更改了这个地址,它是不会传回来的.

不再折腾了,要想修改东西,还是用return来实现.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航