如下代码
<script type="text/javascript">
function changeAge(person)
{
if(typeof person=='object')
{
//改变参数的age属性
person.age=10;
//输出参数age属性
document.write("函数执行中person的age值为:"+person.age+"<br />");
}
else
{
alert("参数类型不符合:"+typeof person);
}
}
changeAge();
</script>
上面代码的函数声明中包含了一个参数,但调用函数时并没有传入任何参数,这种形式对于强类型语言,如java或C都是不允许的,但对于javaScript却没有任何语法问题,因为javaScript会将没有传入实参的参数值自动设置为undefined值
使用空参数完全没有任何程序问题,程序可以正常执行 ,只是没有传入实参的参数值将作为undefined处理。
由于javaScript调用函数时对传入的实参并没有要求,即使定义函数时声明了多个形参,调用函数时也并不强制要求传入相匹配的实参,因此javaScript没有所谓的函数“重载”,这种方式会导致后面定义的函数覆盖前面定义的函数,例如如下代码
<script type="text/javascript">
function test()
{
alert("第一个无参数的test函数");
}
//后面定义的函数将会覆盖前面定义的函数
function test(name)
{
alert("第二个带name参数的test函数:"+name);
}
//即使不传入参数,程序依然调用带一个参数的test函数
test();
</script>
上面程序中定义了两个名为test()的函数,虽然两个test()函数声明的形参个数不同,但第二个test()函数会覆盖第一个test()函数。因此程序中粗体字的代码调用test()函数时,无论是否传入参数,程序始终都是调用第二个test()函数。