javascript 按值传递与按地址传递

作者:vkvi 来源:ITPOW(原创) 日期:2008-10-22
<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 中没有按地址(引用)传递,只有按值传递

相关阅读

相关文章