JS中的arguments

本文介绍了JavaScript中arguments对象的特性和使用方法,包括如何利用它处理传入函数的不定数量参数,实现类似方法重载的功能,以及递归调用等。并通过具体示例展示了如何使用arguments实现数字排序。

最近在看一些关于前端的练习题,遇到一个无从下手的,还是因为学识不精,懂的太少,但经过一番查找,最终还是解决了,这是牛客网上的一个真题,题目如下:
这里写图片描述

看到题目要求,传入参数个数不定,就有点犯怵,还没在js中见过有什么方法可以获取个数不定的参数,因此就涨姿势了。。。


一. arguments的特性:
(1)arguments是个类似数组但不是数组的对象,说他类似数组是因为其具备数组相同的访问性质及方式,能够由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性arguments.length,还有引用函数自身arguments.callee();
(2)arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表;
(3)argument和Function是分不开的,必须在函数体内部使用,不能显式创建 arguments 对象。

二. arguments的功能
学过java的同学都知道,在java中有方法的重载,即两个方法名相同的方法,可以通过参数个数不同来编写不同的方法,但是在js中并没有重载功能,但是通过arguments可以模拟重载。

三. 使用方法
(1)实现和数组一样的下标调用:

<script type="text/javascript"> 
    console.log(add(1,2,3));
    console.log(add(1, 2, 3, 4, 5));

    function add() {
        var sum = 0;
        for (var i = 0; i < arguments.length; i++)
            sum += arguments[i];
        return sum;
    }
</script>   
    /*结果为6和15*/

2.模拟方法的重载

<script type="text/javascript">

    console.log(sum(1,2,3));
    console.log(sum(1, 2));

    function sum() {
        if (arguments.length == 2)
            return arguments[0] * arguments[1];
        else
            return arguments[0] + arguments[1] + arguments[2];
    }
</script>
/*两个参数求积,三个参数求和,结果为6和2*/

3.函数自身的调用,相当于递归

<script type="text/javascript">

    console.log(sum(6));

    function sum(n) {
        if (n == 1)
            return 1;
        else
            return n + arguments.callee(n-1);
    }

</script>
/*实现函数自身的调用,求得1到6的整数之和,结果为21*/

4.改变参数值

<script type="text/javascript">

    console.log(sum(1,2,3));

    function sum(a,b,c) {
        var sum = 0;
        arguments = "I am a student";
        for (var i = 0; i < arguments.length; i++)
            sum = sum + arguments[i];
        return sum;
    }

</script>
/*输出结果为0I am a student*/

知道这些,一开始的题肯定就有答案了,代码如下:

<script type="text/javascript">

    console.log(mySort(50,11,16,32,24,99,57,100));

    function mySort() {
        var tags = new Array();
        for (var i = 0; i < arguments.length; i++)
            tags.push(arguments[i]);
        tags = tags.sort(function(a,b){
            return a - b;
        });
        return tags;
    }

</script>
/*
注意不能使用Array数组自带的sort()方法,因为sort并不是对数字大小排序的函数
*/

谨记,时刻都要有一颗求知的心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值