函数,也叫方法,但是我更喜欢叫它方法.
在JavaScript中,函数的参数有两个,一个是紧跟在函数名的小括号中的"形参"(用于接收值),另一个这是调用该函数方法的时候函数名后紧跟的"实参"(用于把值传给形参).
在大部分编程语言中 ,函数的参数都分为两种:
- 声明函数时的参数是形参(接收值)
- 调用函数时的参数是实参(把值传给形参)
==但是 ,对于JavaScript这门弱类型语言,对函数的参数的处理方面和其他强类型语言相比有很大不同,并且灵活了许多:==
- 形参,在函数内部可以作为一个普通的局部变量使用。而且通常情况下,实参已经把值赋值给了形参。例如下面例子中的num1和num2在方法内部就可以作为一个普通的局部变量使用。
- 在调用函数的时候,实参的个数可以形参的个数一致,也可以不一致。形参可以比实参的个数多,也可以比实参的个数少。
- 形参和实参匹配的时候总是按照顺序匹配。
- 函数对传入的实参,既不做类型的检查,也不做个数的检查。如果需要这些检查,需要开发者自行实现代码完成
- 形参不需要用var声明,如果用了var声明反而会报错.
示例代码
<pre>
<script>
// 声明一个函数,形参的个数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"); //虽然比形参的个数少,但是仍然可以正常调用
</script>
</pre>
1、在通过实参给形参传递参数的时候,如果实参的个数比形参少,则接收不到值的形参的初始化值为 undefined 的。
2、传递的实参比形参多的时候,多余的实参没有形参接受,正常情况下无法访问到传递过来的多余的实参。
3、其实多余的实参并没有丢失,函数帮我们保存在了一个变量(对象)中。这个变量的名字就是 arguments。
4、arguments不需要开发者手动创建,在调用函数的时候,会自动创建,并把传递过来的所有实参的值都保存在这个变量中。
5、可以暂时把arguments当成一个数组来理解,虽然他实际并不是一个数组。(其实是个对象,每个参数都是他的一个属性值)。
argumrnts示例
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");```