JavaScript基础之函数的参数处理

基本类型和复合类型的参数传递

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

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

结果为
在这里插入图片描述
由此可以看出复合类型的变量本身并未持有对象本身,符合类型的变量只是一个引用,该引用指向实际Javascript对象

空参数

<script>
        function changeAge(person){
            if(typeof person == 'object'){
                person.age = 10;
                document.write("函数执行中person的age值为:"+person.age+"<br>");
            }
            else{
                alert("参数类型不符合:"+typeof person);
            }
        }
        changeAge();
</script>

上面代码的函数声明了中包含了一个参数,但调用函数时并没有传入任何参数。这种形式对于强类型语言如Java或C都是不允许的;但对于JavaScript却没有任何语法问题
在这里插入图片描述
对于JavaScript来说,函数名就是函数的唯一标识
如果先后定义两个同名的函数,他们的形参列表并不相同,这也不是函数重载,这种方式会导致后面定义的函数覆盖前面定义的函数

参数类型

Javascript函数声明的参数列表无需类型声明
值得注意的是,Javascript无需类型声明,因此调用函数时传入的p完全可以是整型变量或者是布尔型变量。这些类型的数据都没有setAge()方法,但程序强制调用该方法,肯定导致程序出现错误,程序非正常终止。
为解决这个问题,弱类型语言提出了所谓“鸭子类型”的概念。

<script>
        function changeAge(person){
            if(typeof person =='object'
            && typeof person.age == 'number'){
                document.write("函数执行前person的age值为:"+person.age+"<br>");
                person.age = 10;
                document.write("函数执行中person的age值为:"+person.age+"<br>");
            }
            else{
                document.writeln("参数类型不符合"+typeof person +"<br>");
            }
        }
        changeAge();
        changeAge('xxx');
        changeAge(true);
        p = {abc : 34};
        changeAge(p);
        person = {age :25};
        changeAge(person);
</script>

在这里插入图片描述
这种语法要求:函数对参数执行逻辑操作之前,首先判断参数的数据类型,并检查参数的属性是否符合要求,当所有的要求满足后才执行逻辑操作;否则弹出警告。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值