{{JS}}可变长度的参数列表: Arguments对象
{{JS}}可变长度的参数列表: Arguments对象
在一个函数体内, 标识符arguments具有特殊含义. 它是引用Arguments对象的一个特殊属性. Arguments对象是一个类似数组的对象, 可以按照下标获取传递给函数的参数值. Arguments对象也定义了callee属性.
Arguments对象可以用于多个方面.
1. 检测函数调用时是否具有正确数目的实参.
function f(a, b) {
if(arguments.length !== 2) {
throw new Error("函数期待2个参数");
}
//todo :
}
2. 编写可变参数函数
function max(/* ... */) {
var m = Number.NEGATIVE_INFINITY;
for(var i = 0; i < arguments.length; i++) {
if(arguments[i] > m) {
m = arguments[i];
}
}
return m;
}
var largest = max(3, 5, 100, 88, 99, 11, 10000);
3. Arguments对象有一个非同寻常的特性. 当函数具有命名了的参数时, Arguments对象的数组元素是存放函数参数的局部变量的同义词. arguments[]数组和命名了的参数不过是引用同一变量的两种不同方法. 用参数名改变一个参数的值同时会改变通过arguments[]数组获得的值. 通过arguments[]数组改变参数的值也会相应的改变用参数名获取的参数值.如下例:
function f(a) {
console.log(a);
arguments[0] = null;
console.log(a);
}
f(1);
4. 最后请记住arguments只是一个普通的JS标记符, 而不是一个保留字. 如果函数中有一个参数或者局部变量使用了这个名字, 它就会隐藏对Arguments对象的引用. 如下例:
function e(a) {
var arguments = 1; // 隐藏对Arguments对象的引用
console.log(arguments);
}
function f(a) {
console.log(arguments); // 仍然指向Arguments对象的引用
var arguments = 1;
}
function g(arguments) { // 隐藏对Arguments对象的引用
console.log(arguments);
}
e(1,2);
f(1,2);
g(1,2);
故最好把arguments当作一个保留字并避免将其用作变量名.
作者:bill200711022
补充:web前端 , JavaScript ,