最近在看一些关于前端的练习题,遇到一个无从下手的,还是因为学识不精,懂的太少,但经过一番查找,最终还是解决了,这是牛客网上的一个真题,题目如下:
看到题目要求,传入参数个数不定,就有点犯怵,还没在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并不是对数字大小排序的函数*/谨记,时刻都要有一颗求知的心
新闻热点
疑难解答