<input type="button" value="ChangeInt" onclick="javascript:ChangeInt();"/>
<input type="button" value="ChangeObj" onclick="javascript:ChangeObj();"/>
<script type="text/javascript">
<!--
var m = [0];
var obj = { m:0 };
function ChangeInt()
{
var m1 = m[0];
m1++;
alert("m[0]=" + m[0] + "\r\n" + "m1=" + m1);
}
function ChangeObj()
{
var obj1 = obj;
obj1.m++;
alert("obj.m=" + obj.m + "\r\n" + "obj1.m=" + obj1.m);
}
-->
</script>
我们测试会发现,每次点击第一个按钮时,m、m1 的值都是不变的;而每次点击第二个按钮时,obj.m 和 obj1.m 都是递增的。
原来
- 数字、字符串等是按值传递的。
- 数组、对象等是按地址传递的。本文中 m1 只是用到 m 的一个元素,不能算作数组赋值。
实际上函数内的参数与调用函数时赋的参数,是两个不同的变量,只是他们指向同一个对象(当为对象时),所以操作这个就像操作到那个样,就像是按地址传送一样,详细请参见 JS 中没有按地址(引用)传递,只有按值传递。
相关阅读