本篇文章帶給大家的內容是關於js中的arguments是什麼? js中arguments的使用方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
類別陣列物件:arguments
總所周知,js是一門相當靈活的語言。當我們在js中呼叫一個函數的時候,我們常常會給這個函數傳遞一些參數,js把傳入到這個函數的全部參數儲存在一個叫做arguments的東西裡面,那麼這到底是什麼東西?
在js中萬物皆對象,甚至數組字串函數都是對象。所以這個叫做arguments的東西也是個對象,而且是一個特殊的對象,它的屬性名是按照傳入參數的序列來的,第1個參數的屬性名是'0',第2個參數的屬性名是'1',以此類推,而且它還有length屬性,儲存的是目前傳入函數參數的數,很多時候我們把這種物件叫做類別數組物件。類別數組物件和數組都是物件這個媽生的,但是數組是大哥比類別數組物件多了很多其他的玩具(方法),類別數組物件只是長得很像數組的弟弟而已。
慢著,剛剛不是說數組也是物件嗎,現在這個類別數組物件又是什麼?沒辦法,js就是這麼的靈活。這個類別數組物件不僅儲存給函數傳入的參數,也具有一些其他的屬性,等下會一一道來。
因為類別陣列物件和陣列有很多的共通性,所以我們常常可以用call方法,讓類別陣列物件也使用的陣列的一些方法,就是讓這個弟弟去玩哥哥的玩具,例如… ,還是不扯遠了,這篇文章只是說什麼是arguments,想知道更多關於物件如何借調數組方法的話,請參考這篇文章。
下面舉栗子:
function add() { if( arguments.length == 2 ){ return arguments[0] + arguments[1]; }else{ return '传入参数不合法'; } } console.log( add(2,3) ); console.log( add(1,2,3) );
看看結果:
最後我們還可以看到arguments還有一個叫做callee的屬性,這個屬性是表示的是當前函數的一個引用,簡單點說,這個屬性裡面存儲的我們調用的這個函數的代碼,實在無法理解的時候,又到了console.log大顯身手的時候了。
最後我們還可以看到arguments還有一個叫做callee的屬性,這個屬性是表示的是當前函數的一個引用,簡單點說,這個屬性裡面儲存的我們調用的這個函數的程式碼,實在無法理解的時候,又到了console.log大顯身手的時候了。
function showcallee() { var a = '这里是代码'; var b = '这是另一段代码'; var c = a + b; console.log(arguments.callee); return c; } showcallee();
看到結果的你是不是和我一樣驚呆了呢,這不就是我寫的程式碼嗎,arguments.callee完完整整的把這個函數的這段程式碼回傳了
arguments的一些妙用
1.利用arguments實作方法的重載
下面我們利用arguments物件來實作一個參數相加的函數,不論傳入多少參數都行,將傳入的參數相加後回傳。
function add() { var len = arguments.length, sum = 0; for(;len--;){ sum += arguments[len]; } return sum; } console.log( add(1,2,3) ); //6 console.log( add(1,3) ); //4 console.log( add(1,2,3,5,6,2,7) ); //26
由於js是一種弱類型的語言,沒有重載機制,當我們重寫函數時,會將原來的函數直接覆蓋,這裡我們能利用arguments,來判斷傳入的實參類型與數量進行不同的操作,然後傳回不同的數值。
2.利用arguments.callee實作遞歸
先來看看之前我們是怎麼實作遞歸的,這是一個結算階乘的函數
function factorial(num) { if(num<=1) { return 1; }else { return num * factorial(num-1); } }
但是當這個函數變成了一個匿名函數時,我們就可以利用callee來遞歸這個函數。
function factorial(num) { if(num<=1) { return 1; }else { return num * arguments.callee(num-1); } }
這個方法雖然好用,但有一點值得注意,ECMAScript4中為了限制js的靈活度,讓js變得嚴格,新增了嚴格模式,在嚴格模式中我們被禁止不使用var來直接宣告一個全域變量,當然這不是重點,重點是arguments.callee這個屬性也被禁止了。不過這都不是事兒,ES6為我們新增了很多好用的變數宣告方式和新的語法糖,作為一個時髦的前端,我們趕緊學習一些ES6的新語法吧。
相關推薦:
以上是js中的arguments是什麼? js中arguments的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!