网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网页制作 > Javascript
网页制作:Dreamweaver教程,FrontPages教程,Javascript教程,HTML教程,CSS教程,心得技巧,DHTML教程,网页特效,Discuz!论坛
本月文章推荐
.冒泡算法的三种JavaScript表示.
.JavaScript极速狂飙:组合拼接字.
.用来实现Web页面图片移动托拽的代.
.在Javascript中使用正则表达式.
.用JavaScript使链接按钮不断变化.
.JavaScript+CSS实现tab.
.js入门·循环与判断/利用函数的简.
.服务端VBScript与JScript几个相同.
.JavaScript模拟ACDSEE简单功能.
.javascript写的Hashtable类.
.javascript String.format.
.重新载入javascript文件的方法(给.
.JavaScript极速狂飙:CSS样式表的.
.使主页呈现“飞舞”特效.
.全面理解javascript的caller,cal.
.JS代码的格式化和压缩.
.使用 JavaScript 获取 table 行号.
.Javascript脚本:Location对象.
.Javascript实例教程(20) OLE Aut.
.js实现字体渐渐消失.

javascript参数传址与传值

发表日期:2008-8-5


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

上一篇:Javascript刷新框架及页面的方法总集 人气:1482
下一篇:通过javascript在光标处插入文本 人气:998
浏览全部Javascript的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐