標籤:
一、arguments對象概述:
1、ECMAScript 函數不介意傳遞進來多少參數,也不會因為參數不統一而錯誤。
2、函數體內可以通過 arguments 對象來接收傳遞進來的參數,並且儲存函數參數
function box() { return arguments[0]+‘ | ‘+arguments[1]+‘ | ‘+arguments[5]; //得到每次參數的值,最後結果是1 | 2 | 6}alert(box(1,2,3,4,5,6)); //傳遞參數
二、arguments 的length 屬性:
arguments 對象的下的length 屬性可以得到參數的數量。
function box() { return arguments.length; //得到 6}alert(box(1,2,3,4,5,6));
利用 length 這個屬性,來智能的判斷有多少參數,然後把參數進行合理的應用。比如,要實現一個加法運算,將所有傳進來的數字累加,而數位個數又不確定。
function box() { var sum = 0; if (arguments.length == 0){ return sum; //如果沒有參數,退出 }else{ for(var i = 0;i < arguments.length; i++) { //如果有,就累加 sum = sum + arguments[i]; } return sum; //返回累加結果 } }alert(box(5,9,12));
三、arguments 的callee 的屬性
是一個指標,指向擁有這個 arguments 對象的函數
1、簡單的一個遞迴:
function box(num) { if (num <= 1) { return 1; } else { return num * box(num-1); //一個簡單的的遞迴 } } alert(box(4));//4*3*2*1 = 24 結果是24
2、遞迴演算法
對於階乘函數一般要用到遞迴演算法,所以函數內部一定會調用自身
如果函數名不改變是沒有問題的,但一旦改變函數名,內部的自身調用需要逐一修改
為瞭解決這個問題,我們可以使用 arguments.callee 來代替。
function box(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num-1); //使用 callee 來執行自身,實現遞迴 } } alert(box(4));//結果也是24
四、函數的重載問題
ECMAScript 中的函數,沒有像其他進階語言那種函數重載功能。(如果有相同名稱的函數,則以最後一個為主)
function box(num) { return num + 100;}function box (num) { //會執行這個函數 return num + 200;}alert(box(50)); //返回結果是250,即調用的是第二個函數
function box(num,a) { return num + 100;}function box (num) { //會執行這個函數 return num + 200;}alert(box(50,3)); //結果還250 說明還是執行第二個函數
JavaScript函數的arguments對象、重載問題