JS函数的参数处理

一、基本类型和复合类型的参数传递
对于基本类型参数,JavaScript采用值传递方式,当通过实参调用函数时,传入函数里的并不是实参本身,而是实参的副本,因此在函数中修改参数值并不会度实参有任何影响。
复合类型参数的值传递方式:
例:

<script type="text/javascript">
        function changeAge(person)
        {
            person.age = 10;
            document.write("函数执行中person的age值为:"
             + person.age + "
"
); person = null; } var person = {age : 5}; document.write("函数调用之前person的age的值为:" + person.age +"
"
); changeAge(person); document.write("函数调用之后person的age的值为:" + person.age + "
"
); document.write("person对象为:" + person); </script>

结果:
JS函数的参数处理_第1张图片
(在changeAge()函数中的最后一行,将person对象赋值为null,但changeAge()执行结束时,person依然是一个对象,不是null这说明person本身并未传入到changeAge()函数中,传入的时person的副本;)
上面程序的关键是,复合类型的变量本身并未持有对象本身,复合类型的变量只是一个引用,该引用指向实际的JavaScript对象。
二、空参数
在JavaScript中,调用函数时没有传任何参数是没有语法问题的,会自动将没有传入的实参的参数值自动设置为undefined值(如果想定义两个同名的函数,他们的形参列表并不相同,这也不是函数重载,这种方式会导致后面定义的函数覆盖前面定义的函数)

三、参数类型
JavaScript函数声明的参数列表无须类型声明,但是传入变量如果不包含方法,会导致程序出错;
为了解决这个问题,提出了“鸭子类型”;鸭子类型认为:如果弱类型语言的函数需要接受参数,则应先判断参数类型,并判断参数是否包含了需要访问的属性、方法。只有当这些条件都满足时,程序才开始真正处理调用参数的属性、方法。
例:
JS函数的参数处理_第2张图片
JS函数的参数处理_第3张图片

你可能感兴趣的:(JS函数的参数处理)