zoukankan      html  css  js  c++  java
  • Javascript进阶(7)---函数参数

    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
  • 相关阅读:
    正则表达式
    网络编程
    多线程
    IO—Data
    IO-对象流
    IO-转换流
    异常
    常用类——File——Random——Math——枚举
    每月博客-20180310
    每月博客-20180204
  • 原文地址:https://www.cnblogs.com/HXW-from-DJTU/p/5936683.html
Copyright © 2011-2022 走看看