js-----arguments一个特别的对象

《开场白》

js的世界中一切都是对象,我看到一个比较特别的她---arguments,而且arguments对象和Function是分不开的。

1.为什么说她比较特别?

arguments对象是一个长的很像数组的对象,她不是一个Array。它类似于Array,访问单个参数的方式与访问数组元素的方式相同。,但除了长度之外没有任何Array属性,。她是函数运行时的参数列表,不能显式创建,只有函数开始时才可用。她的样子非常类似数组,如下:
arguments[0]
arguments[1]
arguments[2]

2.她有一个属性length,有点像数组的感觉arguments.length

先引入个简单的例子来看看她如何使用!
返回调用程序传递给函数的实际参数数目。

求和
【一】
JS函数不存在重载,但是我们可以实现js里面的模拟重载,这就是JS利用arguments重载的效果,简单理解就是一个函数重复利用arguments.length是有实参决定,即函数调用时候里面的参数个数决定!

//可以用arguments 来传入多个参数
    function sum(){
        for(var sum=0,i=0;i<arguments.length;i++){
            sum += arguments[i];
        }
        console.log(sum);
    }
    sum(1);//--------------------1
    sum(1,2);//------------------3
    sum(1,2,3);//----------------6

3.再看一下她的另外一个属性arguments.callee

就是指代函数本身函数名,来个例子可能会对她更清晰。
【二】

//先看一个简单的递归求和
function Sum(n){
    if(n<=1){
        return 1;
    }else{
        return n + Sum(n-1);
    }
}
alert(Sum(100));

但是我们如果想用匿名函数来写这个的话就用到了arguments.callee属性
【三】

alert(
//匿名函数
(function(n){
    if(n<=1){
        return 1;
    }else{
        return n + arguments.callee(n-1);//很完美的使用
    }
})(100)
);

最后看一个比较长的代码,看明白就对她了解的差不多了。
【四】

//匿名函数立即执行
(function(d,e,f){
    console.log(d);//--------------------helloworld
    console.log(e);//--------------------2
    console.log(f);//--------------------!
    //arguments的真面目就是对象
    console.log(arguments);
    //arguments收集了所有的实参,即使没有与之对应的形参
    for(var i=0;i<arguments.length;i++){
        console.log(arguments[i]);
    }
    //形参与对应的arguments单元是相互映射的 相互影响的
    arguments[0] = 'wangtao';
    console.log(d);//-----------------wangtao

    //访问一下没有传进来的参数
    console.log(arguments[4]);//-----undefined

    //arguments可以获取函数运行时的参数个数
    console.log(arguments.length);

    //arguments.callee属性代表当前运行的函数
    console.log(arguments.callee);
})('helloworld',2,'!','@');

当 function 对象开始执行时,脚本引擎将 arguments 对象的 length 属性初始化为传递给该函数的实际参数数目。js不会主动为你判断你到底给函数传了多少个参数,如果你多传了,多余的部分就没有被使用,如果你少传了,那么没传的参数值就是undefined.
arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。但是实参和形参之间是相互影响的。

今天的内容就是

  • arguments对象:函数对象内,自动创建的专门接收所有参数值得类数组对象
  • 她的两个属性
  • arguments.length:获得具体传入的参数个数!
  • arguments.callee:函数本身函数名,仅当相关函数正在执行时才可用!

《结束语》

在2017的最后一个月看前面十一个月,对所有的事会有一种后知后觉的感觉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值