Javascript与Java完全的类似,JS的参数传递也完全是采用 值传递的方式.
基本类型的参数传递
对于基本类型的参数,JS采用值传递的方式,当通过实参调用函数时,传入函数的并
非实参本身,而是实参的副本,因此在函数中修改的值并不会对实参有任何的影响.
代码示例如下:
<script>
function change(arg1)
{
arg1=10;
document.writeln("函数执行中的arg1的值为:"+arg1+'<br />');
}
var x=5;
document.writeln("函数调用之前X的值为:"+x+'<br />');
change(x);
document.writeln("调用函数之后X的值为:"+x+"<br />");
</script>
执行结果如下:
通过结果我们可以证实当使用X变量作为参数调用change函数时,X并未真正的传
入函数中,传入的仅仅是X的副本,所以X的值并不会改变.
符合类型的参数传递
对与复合类型的参数来说依然是值传递的方式.
代码示例如下:
<script>
function changeAge(person){
person.age=10;
document.writeln("函数执行中person的age的值为:"+person.age+"<br />");
person=null;
}
var person={age:5};
document.writeln("函数执行之前person的age的值为:"+person.age+"<br />");
changeAge(person);
document.writeln("函数执行之后person的age的值为:"+person.age+"<br />");
document.writeln("person的对象为:"+person);
</script>
运行结果为:
函数执行之前person的age的值为:5
函数执行中person的age的值为:10
函数执行之后person的age的值为:10
person的对象为:[object Object]
如果仅从ag的属性值来判读,很容易认为这是采用了引用传递方式,但是事实上还
是这种判断是错误的,还是采用的值传递的方式.
我们可以发现person在函数执行完之后,依然是一个对象,并不是null,这表明
person本身并没有传入函数当中,只是穿入了一个副本.
上面的程序关键是:
符合类型的变量本身并不持有对象本身.当把person符合类型传入函数时,传入的
依然是,变量的副本,只是这个副本和原person变量只想同一个JS对象,因此不管是
修改副本所值的对象,还是原person符合类型所值的对象,都是修改的同一个对象.