JavaScript arguments的理解、属性、及应用

arguments(类数组对象):

当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的所有参数变成一个类数组存储在arguments里面。

接下来我们具体看看例子:

<script type="text/javascript">
function exam() {
    console.log(arguments);
}
exam(1,2,3,4,5,6);
</script>

下面我们用console.log的方式,将arguments对象输出到控制台

这里写图片描述

这里我们可以看到,arguments对象将我传入的六个参数以数组的形式保存在里面,还有保存了我传入函数的实参的个数(length)。而且我们可以看到arguments对象的__proto__是指向object的,这也说明了他是个类数组对象,而不是一个数组。
总结一下:在存储类数组的同时(类数组),arguments还有length属性和__proto__属性(对象),所以我们把它称之为类数组对象。

下面我们来看看arguments的应用:

  • 判断当前传入参数的个数是否与我们需要的数量一致
function add() {
    if( arguments.length == 2 ){
        return arguments[0] + arguments[1];
    }else{
        return '传入参数不合法';
    }
}

console.log( add(1,2) );
console.log( add(1,2,3) );
//3  传入参数不合法
  • 引用自身(将自身原原本本的引用下来),这条属性多用于下面的递归

  • arguments.callee
    代表函数名,多用于递归调用,防止函数执行与函数名紧紧耦合的现象(引用该函数的函数体内当前正在执行的函数),对于没有函数名的匿名函数也非常起作用。

示例:

<script type = "text/javascript"> 
    var num = (function (n){        //构造函数 无函数名
        if(n==1){
            return 1;
        }
        return n*arguments.callee(n-1);   //递归时找不到函数名,此时用callee来等效函数本身
    }(20))
</script>

辨析:caller(不是arguments上的属性)

<script type = "text/javascript"> 
   function test() {
        demo();
    }
    function demo() {
        console.log(demo.caller);   //函数自己的属性,在那个环境被调用就等效哪个环境
    }
    test();
</script>
//  function test() {
        demo();
    }
  • arguments.length
    可以计算出类数组长度len = arguments.length,经常在循环中使用。
function add() {
    var len = arguments.length,
        sum = 0;
    for(;len--;){
        sum += arguments[len];
    }
    return sum;
}

console.log( add(1,2,3) );   //6
console.log( add(1,2,3,4) );     //10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值