ECMAScript函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。
一、ECMAScript传递给函数的参数与定义时的参数可以不一致
原因是ECMAScript中的参数在内部是用一个数组表示的,函数接收到的始终都是这个数组,而不关心数组中包含哪些参数。如果这个数组中不包含任何元素,没有关系;如果包含多个元素,也没有问题。
二、通过arguments对象访问参数数组
实际上,arguments对象只是与数组类似,它并不是Array的实例,可以使用方括号语法访问它的每一个元素,即第一个元素是arguments[0],第二个元素是arguments[1],以此类推,使用length属性来确定传递进来多少个参数。
一个实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<button onclick="func('rain','yan')">点我</button>
<script>
function func() {
alert("Hello "+arguments[0]+","+arguments[1]);
}
</script>
</body>
</html>
三、arguments对象可以与命名参数一起使用
一个例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test arguments</title>
</head>
<body>
<button onclick="daAdd(12,14)">button1</button>
<button onclick="daAdd(12)">button2</button>
<script>
function daAdd(num1,num2) {
if(arguments.length == 1){
alert(num1+10);
} else if(arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
</script>
</body>
</html>
点击button1显示:
点击button2显示:
四、ECMAScript函数没有重载
ECMAScript函数没有签名,因为其参数是由包含零个或多个值的数组表示的。而没有函数签名,ECMAScript函数不能重载。