函数的参数传递全部采用值传递的方式
1.基本类型和复合类型的参数传递
(1)基本类型
当通过实参调用函数时,传入函数里的并不是实参本身,而是实参的副本。因此在函数中修改参数值(或对参数赋值)并不会对实参有任何影响。
(2)复合类型(易混淆)
<script>
function changeAge(person){
//
person.age=10;
alert("函数执行中age的值为"+person.age);
person=null;
}
var person={age:5};
alert("函数调用之前person的age属性值"+person.age);
changeAge(person);
alert("函数调用后person的age值"+person.age);
alert("person对象"+person);
</script>
2.空函数
函数声明中包含了一个参数,但在调用函数的时候没有传入任何参数。
这种形式在java、c等时不允许的,但因为JavaScript会将没有传入实参的参数值自动设为undefined,所以没有语法错误
对于JavaScript来说,函数名就是唯一标识
如果先后定义两个同名的函数,形参并不相同,在java中叫做函数重载(重写),但在js中没有重载,会导致后面的将前面的覆盖。
3.参数类型
js函数声明的参数列表无须类型声明,是作为弱类型语言的特征之一。
(所有弱类型语言所共有的问题)
由于声明函数时,形参无须定义数据类型,会导致在调用函数时可能出现问题。
为解决上述问题,提出了”鸭子类型“:如果弱类型语言的函数需要接受参数,则应先判断参数类型(用typeof),并判断参数是否包含需要访问的属性、方法。只有当这些条件都满足的时候,程序才开始调用。