在大部分编程语言中,函数的参数都分为两种:

  1. 声明时的参数是形参(用于接收值)

  2. 调用方法的时候传递的参数是实参(用于把值传递给形参)

但是,对于JavaScript这门弱类型语言,对函数参数的处理方面与别的强类型语言有很大不同,且灵活了很多:

  1. 形参声明不需要var。( 因为所有的变量都是用var来声明,所以这个地方省略了没啥问题。添加var会出现语法错误 )

  2. 形参,在函数内部可以作为一个普通的局部变量使用。而且通常情况下,实参已经把值赋值给了形参。例如上面例子中的num1num2在方法内部就可以作为一个普通的局部变量使用。

  3. 在调用函数的时候,实参的个数可以形参的个数一致,也可以不一致。实参可以比实参的个数多,也可以比实参的个数少。

  4. 形参和实参匹配的时候总是按照顺序匹配。

  5. 函数对传入的实参,既不做类型的检查,也不做个数的检查。如果需要这些检查,需要开发者自行实现代码完成

示例代码:

//    声明一个函数,形参的个数2个
function doSomething(num1, num2){
  alert(num1 + ":" + num2);    //    num1和num2,在方法的内部可以作为普通的局部变量使用。  
}

//调用函数:把 5 传递给num1, 把 "a" 传递给num2
doSomething(5, "a");    // 弹出:5:a

//调用函数:把 "a" 传递给num1, 把 “b” 传递给num2 ."c"没有形参接受。
doSomething("a", "b", "c"); //虽然比形参的个数多,但是仍然可以正常调用。

//调用函数:把 "a"传递给num1.
doSomething("a"); //虽然比形参的个数少,但是仍然可以正常调用


1、在通过实参给形参传递参数的时候,如果实参的个数比形参少,则接收不到值的形参的初始化值为 undefined 的。

2、传递的实参比形参多的时候,多余的实参没有形参接受,正常情况下无法访问到传递过来的多余的实参。

3、其实多余的实参并没有丢失,函数帮我们保存在了一个变量(对象)中。这个变量的名字就是 arguments。

4、arguments不需要开发者手动创建,在调用函数的时候,会自动创建,并把传递过来的所有实参的值都保存在这个变量中。

5、可以暂时把arguments当成一个数组来理解,虽然他实际并不是一个数组。(其实是个对象,每个参数都是他的一个属性值)

arguments使用代码简单实例:

关于数组的详细使用,明天再讲。

function doSomething (num1, num2) {
  alert(num1 === arguments[0]);  //true    
  alert(num2 === arguments[1]); // true
  /*
      只要方法被调用,则一定会自动创建一个arguments对象,这个对象会存储传过来的所有的实参。
  */
  for (var i = 0; i < arguments.length; i++) {
    alert(arguments[i]);
  }
}
doSomething("a", "b", "c", "d");
Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-10-18 03:19:29

results matching ""

    No results matching ""