什么是JS中的arguments对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是JS中的arguments对象相关的知识,希望对你有一定的参考价值。

参考技术A 参考下我的js笔记

在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象 arguments[0],arguments.length

arguments是什么?
答:1:arguments是收到的实参副本
在词法分析中, 首先按形参形成AO的属性,值为undefined
当实参传来时, 再修改AO的相应属性.
2:并把所有收到实参收集起来,放到一个arguments对象里
t(a,b,c),
调用时: t(1,2,3,4,5) 5个参数
此时 , AO属性只有a,bc,3个属性, arguments里有1,2,3,4,5, 所有的值

对于超出形参个数之外的实参, 可以通过arguments来获得
3:arguments 的索引 从 0, 1,2,....递增,与实参逐个对应
4:arguments.length 属性代表实参的个数
5:arguments一定不是数组, 是长的比较像数组的一个对象,虽然也有length属性
6:arguments每个函数都会有,因此,arguemnts只会在内部找自身的arguments,
无法引用到外层的arguments
<script type="text/javascript">
// 求圆形面积,矩形面积, 三角形面积
function area ()
if(arguments.length == 1)
alert(3.14 * arguments[0] * arguments[0]);
else if(arguments.length == 2)
alert(arguments[0] * arguments[1]);
else if(arguments.length == 3)
alert(arguments[0] + arguments[1] + arguments[2]);
else
return null;


area(10,20,30);

</script>

javascript中的arguments对象

在js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量。

1、什么是arguments?

这个函数体内的arguments非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的[i]和.length。

2、有什么作用?

js语法不支持重载!但可用arguments对象模拟重载效果。

arguments对象:函数对象内,自动创建的专门接收所有参数值得类数组对象。
arguments[i]: 获得传入的下标为i的参数值
arguments.length: 获得传入的参数个数!

重载:

  程序中可定义多个相同函数名,不同参数列表的函数,
  调用者不必区分每个函数的参数,
  执行时,程序根据传入的参数个数,自动判断选择哪个函数执行。

例子如下:

// 1、如果用户传入一个参数,求平方
    function sum(a){
        console.log(a*a);
    }

    //如果用户传入两个参数,就求和
    function sum(a,b){
        console.log(a+b);
    }
    sum(4); //
    sum(4,5); //

上述例子中本意是想让同名函数sum()根据参数不同输出不同结果,但是sum是函数名字,本质也是个变量,

第二个会覆盖第一个,所以上述的正确输出答案是:NaN,9.所以这样显然不可以。

如果用arguments,就简单多了。

如下2个例子:

//2、
    function calc(){
        //如果用户传入一个参数,求平方
        if(arguments.length==1){
            console.log(arguments[0]*arguments[0]);
        }else if(arguments.length==2){
        //如果用户传入两个参数,就求和
            console.log(arguments[0]+arguments[1]);
        }
    }
    calc(4); //16
    calc(4,5); //9
/*3、无论用户传入几个数字,都可以求和*/
    function add(){
        //arguments:[]
        //遍历arguments中每个元素,并累加
        for(var i=0,sum=0;i<arguments.length;sum+=arguments[i++]);
        return sum;//返回和
    }

    console.log(add(1,2,3)); //6
    console.log(add(1,2,3,4,5,6)); //21

这就是JS利用arguments重载的效果,简单理解就是一个函数重复利用.

arguments.length是有实参决定,即函数调用时候里面的参数个数决定!

以上是关于什么是JS中的arguments对象的主要内容,如果未能解决你的问题,请参考以下文章

你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?

js 默认的参数可变的参数变量作用域

什么是JS中的arguments对象

什么是JS中的arguments对象

JS中的arguments对象解析

javascript中的arguments对象