美文网首页Web前端之路让前端飞
JavaScript中的函数与arguments

JavaScript中的函数与arguments

作者: 小枫学幽默 | 来源:发表于2017-12-31 12:49 被阅读66次

    js中怎么定义一个函数?

    // 定义一个函数,求出参数中的最小值
     function min(a,b,c,d...) {
      //函数的代码
    }
    

    上面的函数怎么调用?

    min(1,2,3,4,5,6,7...);
    

    定义一个求两个数中最小值的函数

    function min(a, b) {
      return a>b? b:a;
    }
    
    调用
    
    min(1,2);
    
    • 1 函数的形参是什么?
      函数的形参是定义该函数时,你设置的函数参数个数
    • 2 min函数的形参有几个?
      2个,a和b
    • 3 min函数的实参有几个?
      调用函数时传递几个就是有几个,上面调用时,我们传递了 1和2 ,那么实参个数就是两个

    问?既然实参传递几个就是有几个,调用函数时,我传递的实参个数能不能大于形参个数?

    function min(a, b) {
      return a>b? b:a;
    }
    var result=min(1,2,-1,4)
    console.log(result) //输出 1
    

    以上代码说明,我们可以传递的参数大于形参个数,且不会出错。

    • 为什么结果是1,而不是-1?
      对于函数来说,实参和形参是一一对应的,即a=1,b=2,我们的代码只要求a,b参数运算,那么结果自然是1。

    问题来了,我们传递了4个参数,a,b用了,那么-1,4 这两个参数去哪了,我能不能拿到?

    答案是,我们的另外两个参数被放在了函数的arguments中,我们来看看arguments是个什么

    function min(a,b) {
      console.log(arguments);
      return a>b? b:a;
    }
    
    var result=min(2,6,90,10)
    console.log(result) //输出 2
    
    image.png
    • 原来我多传的参数在arguments中。
      实参有多少个,只要调用 arguments.length即可,当前有4个
    • 函数的形参个数能不能知道?
      当然可以 , 形参个数就是 min.length
    • arguments看着像是个数组,不过,它可并不是一个数组哦,它是个object类型的,
      image.png
    • 怎么取到所有的参数,就不言而喻了
    for(var i in arguments){
        console.log(arguments[i])
     }
    
    • 说了这么半天,这玩意儿有啥用处?
    //两个数字中的最小值
    function min(a,b){
      return Math.min(a,b);
    }
    min(1,2);
    //四个数字中的最小值
    function min(a, b, c, d){
      return Math.min(a,b,c,d);
    }
    min(1, 2,3,4);
    //6个数字中的最小值
    function min(a, b, c, d,e,f){
      return Math.min(a, b, c, d,e, f);
    }
    min(1, 2,3,4,5,6);
    //n个数字中的最小值
    function min(a, b, c, d,e,f,...n){
      return Math.min(a, b, c, d,e, f,...n);
    }
    min(1, 2,3,4,5,6,...n);
    //随着我们要比较的数字的增多,我的函数形参数目也越来越多,
    //有了arguments这个对象,形参数目不就可以不写了么,像这样
    function min(){
      var res=arguments[0]
      for(var i in arguments){
        if(i==0) continue;
        res=res>arguments[i]?arguments[i]:res;
      }
      return res;
    }
    min(1, 2,3,4);
    
    //代码更精简点,还可以这样
    function min(){
      return Math.min.apply(this,arguments);
    }
    min(1, 2,3,4,-1,2,0-3);//-3
    

    那么我们可以少传么?

    function min(a, b) {
      return a>b? b:a;
    }
    var result=min(1)
    console.log(result) //输出 1
    

    以上代码说明,我们可以传递的参数小于形参个数,且不会出错。
    为什么不会出错?因为当我们不给min函数传递 b 这个参数的时候,b这个参数为 undefined,这时候,a>undefined 为false,因为b转换为数值类型之后是 NaN。

    相关文章

      网友评论

        本文标题:JavaScript中的函数与arguments

        本文链接:https://www.haomeiwen.com/subject/bnmogxtx.html