javascript参数传址与传值


一直认为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来实现.

本文作者:



相关阅读:
MySQL索引分析和优化
javascript select 改变字的颜色
js 获取键盘值用法(兼容IE及Firefox)
Javascript动态创建 style 节点
jquery.ui.progressbar 中文文档
SQL2008中 阻止保存要求重新创建表的更改 的解决方法
更优雅的事件触发兼容
在Oracle数据库中使用超过2G的内存
在SAN上创建SQL Server群集
HTML表格标记教程(25):行的垂直对齐属性VALIGN
PHP5自动加载实现方法及代码
给CSS初学者汇总的几个技巧
后关系型数据库时代,真的要到来吗?
关于Linux下对U盘不利的一些操作说明
快速导航

Copyright © 2016 phpStudy | 皖ICP备18014864号-4