最近在看一些關于前端的練習題,遇到一個無從下手的,還是因為學識不精,懂的太少,但經過一番查找,最終還是解決了,這是??途W上的一個真題,題目如下:
看到題目要求,傳入參數個數不定,就有點犯怵,還沒在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并不是對數字大小排序的函數*/謹記,時刻都要有一顆求知的心
新聞熱點
疑難解答