JS传值和传址问题(JS深拷贝)

JavaScript06

JS传值和传址问题(JS深拷贝),第1张

当我们在使用JS进行赋值时,进行简单类型的赋值,只会改变变量的值,而不会改变变量的地址,例如:

此时改变b的值,a的值是不会收到影响的。

而当我们进行复杂类型赋值时,例如:

此时我们b中的name值改变了,与此同时a中的name值也将变成b,大多数情况下我们都不希望这种情况发生,那么该怎么处理?

(ps:简单数据类型一般包括number,string,boolean,其他数据类型一般都为复杂数据类型)

处理这个问题涉及到JS中的深拷贝,JS的深拷贝会为新的变量重新申请一个新的地址块,不会指向原变量的地址,如何实现深拷贝,以下提供了两种方法。

将a进行序列化之后赋值给b,这种方法虽然简单,但是有一定的缺陷,如果a对象中有函数,数组等复杂数据类型,在序列化之后将会丢失这些复杂数据类型,导致赋值不完全。

main.htm假设已存在一个txtMain的文本框

执行调用ShowTeatHtml():

function ShowTeatHtml(){

var rtnValue= window.showModalDialog("test.htm", window,

"unadorned:yeshelp:noscroll:yesstatus:yes"

+ "dialogWidth:800" //宽

+ "pxdialogHeight:600" //高

+ "pxcenter:yes")

document.getElementById("txtMain").innerText=rtnValue

}

假设test.htm有一个ID为btnReturn的按钮\一个ID为txtReturn的文本框

设置btnReturn的onclick="CloseAndReturn()"

function CloseAndReturn(){

var rtnTxt=document.getElementById("txtReturn").innerText

window.returnValue=rtnTxt

window.close()

}

工作闲暇,完全手敲的代码。

有一个办法很方便

a.js文件改成其他服务器端脚本,但输出是js语法格式

比如把a.js改成a.php文件

代码示例如下:

<?php $id = $_GET['id'] echo ' function tan(){ alert("' . $id . '") } '这个文件会获取提供的id的值,然后生成一个js函数方法

调用的时候:

<script type="text/javascript" src="a.php?id=20"></script><button onclick="tan()">Click</button>

上面是js引入这个php文件,并提供一个参数id,值是20

然后加了一个按钮触发点击事件调用a.php生成的js函数方法,结果是会弹出20的提示警告框

效果如下图:

满意请采纳。