{{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当作一个保留字并避免将其用作变量名.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值