Javascript进阶---函数参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript进阶---函数参数相关的知识,希望对你有一定的参考价值。

arguments对象

  javascript中,谈到函数参数,就不得不说一说那个熟悉又陌生的argunemts

  • arguments对象用于承载调用函数时候传入的参数
  • arguments不是一个数组,但是十分类似一个Array,有length属性,也可以用下标去访问
  • arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。
    function f(a, b, c) {
      console.log(arguments.length); // result: "2"
      a = 100;
       console.log(arguments[0]);    // result: "100"
      arguments[0] = ‘qqyumidi‘;
       console.log(a);               // result: "qqyumidi"
       console.log(c);               // result: "undefined"
       c = 2012;
       console.log(arguments[2]);    // result: "undefined" 
    }
    f(1, 2);                  //实际上只传了两个参数

    此处证明,函数内部的形参一开始为空的时候,则内部形参的值与arguments对应位置的值就不会同步了

    (本引用参考自http://www.cnblogs.com/lwbqqyumidi/archive/2012/12/03/2799833.html

  • 在Javascript中,函数名相同,传参数目/类型不同,不会被视为两个函数。也不会像JAVA一样进行函数的重载,利用arguments对象则可以在Javascript中模拟出重载的效果
    function fun() {
      if (arguments.length == 0) {
        //  do sth;
      }
      if (arguments.length == 1) {
        if (typeof (arguments[0]) == ‘function‘) {
          //  do sth for function
        }
      }
      if (arguments.length == 2) {
        //  do sth;
      }
    }
  • 在Javascript中传参的个数并不会影响函数被调用  
    function fun(){
        return arguments[0] + arguments[1];
    }
    fun(3,5);      // 8
    fun(3);        // NaN
    fun();         //NaN

    例子中的aruguments[0]和aruguments[1],若未传入,则值为NaN

  • arguments对象中有一个实用的属性:callee
    function count(a){
       
        console.log(arguments.callee);
    }
    
    count(10);// count(a)

    返回这个函数本身

传入过量参数

  • 当调用某个函数时,传入了过多的参数怎么办?
  • 在函数声明的时候使用“...rest”的方式来表示剩余的参数(rest为任意合法名称,为一个数组)
    function fun(a, b, ...restArray) {
      console.log(‘我们接收了:‘ + a + ‘与‘ + b);
      var count=2;
      for (var x of restArray){
      count++;
      console.log("第"+count+"个是:"+x);
      }
    }
    fun(1, 8, 9, 5,8,9,6,4,8,7,8,9);
    /*
    我们接收了:1与8
    第3个是:9
    第4个是:5
    第5个是:8
    第6个是:9
    第7个是:6
    第8个是:4
    第9个是:8
    第10个是:7
    第11个是:8
    第12个是:9
    */

    Javascript将会把多余的参数使用一个自定义名称的数组将其存放起来

传入的参数不够

  当调用某个函数的时候,传入的参数不够(传入的参数比接收的少),javascript就会以undefined去代替缺少的参数。这样一来,就有可能影响原函数内部的操作,现ES 6推行允许给参数福默认值,在传参缺少时,直接使用默认值。

function fun(a = "我是A", b = "我是B", c){
    console.log(a + " " + b + " " + c);
  }

fun("我是A的表姐");//我是A的表姐 我是B undefined

 

以上是关于Javascript进阶---函数参数的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

JavaScript 函数进阶函数(匿名回调递归函数)及相关练习

带你学习Javascript中的函数进阶

JavaScript 精粹 基础 进阶函数和作用域(函数this)

JavaScript自定义函数进阶(匿名函数变量的作用域)

JavaScript 函数进阶丨 函数的定义和调用