首页 > 代码库 > Javascript进阶(7)---函数参数

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);      // 8fun(3);        // NaNfun();         //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进阶(7)---函数参数