理解JS函数中的参数

ECMAScript函数的参数与段多事语言中函数的参数有所不同。ECMAScript中的函数无所谓传几个参数和类型,解析器永远不会报错。
例如:

function doAdd1(num1,num2){
        alert(num1+num2);
    }
    doAdd1(10);//NAN
    doAdd1(30,20);//50

解析器照样不会报错,只是如果传递一个参数计算出来的结果为NAN

之所以这样,追究其原因,是因为在ECMASript中的参数内部是用一个数组表示的。函数接收到的始终都是一个数组。

实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数

arguments对象类似于数组,可以使用方括号语法访问每一个元素,arguments[0]、arguments[1],并且可以使用length属性来确定传递进来多少个参数。

通过arguments对象的length属性可以确定也有多少个参数传递给了函数

例如下面的例子:

function doAdd(){
        if(arguments.length == 1){
            alert(arguments[0]+10);
        }
        else if(arguments.length == 2){
            alert(arguments[0] + arguments[1]);
        }
    }
    doAdd(10);//20
    doAdd(30,20);//50

arguments.length获知到参数不同的个数判断进入不同的分支语句,
这个特性虽然算不上完美的重载,但也足够弥补ECMAScript的这一缺憾了。

另一个与参数相关的就是arguments对象可以和命名参数一起使用
例如:

//arguments对象和命名参数一起使用
    function doAdd(num1,num2){
        if(arguments.length == 1){
            //内存空间相互独立,值会同步
            alert(num1+10);
        }
        else if(arguments.length == 2){
            alert(arguments[0] + num2);//50
        }
    }
    doAdd(10);//20
    doAdd(30,20);//50

由于num1的值与arguments[0]的值相同,因此可以互换使用

arguments的值与对应命名参数的值保持同步

例如下面的写法与上面例子的结果相同

function doAdd(num1,num2){
        if(arguments.length == 1){
            //内存空间相互独立,值会同步
            alert(num1+10);//arguments的值与对应命名参数的值保持同步
        }
        else if(arguments.length == 2){
            alert(num1 + num2);//num1 = arguments[0],num2 = arguments[1];
        }
    }
    doAdd(10);//20
    doAdd(30,20);//50

说在最后:没有传递值的命名参数将自动被赋予undefind值。就和定义了变量但又没有初始化一样

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值