JS arguments对象

arguments是所有函数内部可以使用的一个局部变量,是一个类数组对象。之所以说是类数组对象,是因为它具有Array一样的length属性,但是其不具备Array的其它属性。

var arr = [];
arr instanceof Array; // true;

function f() {console.log(arguments instanceof Array);}
f(); //false

arguments类数组对象建立了与函数的实参的联系,可以使用[]操作符像访问数组一样访问传入的实参并且可以修改实参的值,arguments.length表示了传入实参的个数。利用这一特性,我们可以模拟JS的函数重载。

//使用arguments模拟函数重载,实现不确定个数的数的加法
function f() {
    var sum = 0,
        len = arguments.length;
    if (len === 1) {
        sum = arguments[0];
    } else if (len > 1) {
        sum = Array.from(arguments).reduce(function (result, val){
            return result + val;
        }, 0);
    }
    return sum;
}

arguments修改实参

arguments对象还有两个常见属性callee和caller。为了更清楚地了解arguments,使用浏览器console打印出其相关信息:

arguments对象详情

可以看出,arguments的原型是Object,其属性callee是一个函数,指向其自身。
arguments.callee指向函数体内当前正在执行的函数,并且可以使用arguments.callee.length得到形参个数,其常见的用法是在匿名递归函数中调用匿名函数自身,如:

function fb(n) {
    if (n <= 1) {
        return 1;
    } else {
        return n * arguments.callee(n-1);
    }
}
f(5);  //120
f(0);  //1

需要注意的是,ES5的严格模式下,已经禁用了arguments的callee,caller,以及参数绑定,仅可以使用length属性和索引,使用时应当特别留意。
ES5严格模式下的arguments对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Neil-

你们的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值