瞭解arguments這個對象以前先來認識一下javascript的一些功能:javascript
其實Javascript並無重載函數的功能,可是Arguments對象可以模擬重載。Javascrip中每一個函數都會有一個Arguments對象實例arguments,它引用着函數的實參,能夠用數組下標的方式"[]"引用arguments的元素。arguments.length爲函數實參個數,arguments.callee引用函數自身。java
arguments他的特性和使用方法數組
特性:函數
1.arguments對象和Function是分不開的。this
2.由於arguments這個對象不能顯式建立。spa
3.arguments對象只有函數開始時纔可用。code
使用方法:
對象
雖然arguments對象並非一個數組,可是訪問單個參數的方式與訪問數組元素的方式相同blog
例如:遞歸
arguments[0],arguments[1],。。。arguments[n];
在js中 不須要明確指出參數名,就能訪問它們,例如:
function test() { var s = ""; for (var i = 0; i < arguments.length; i++) { alert(arguments[i]); s += arguments[i] + ","; } return s; } test("name", "age"); 輸出結果: name,age
咱們知道每個對象都有本身的屬性,arguments對象也不例外,首先arguments的訪問猶如Array對象同樣,
用0到arguments.length-1來枚舉每個元素。下面咱們來看看callee屬性,返回正被執行的 Function 對象,
也就是所指定的 Function 對象的正文。callee 屬性是 arguments 對象的一個成員,僅當相關函數正在執行時纔可用。
callee 屬性的初始值就是正被執行的 Function 對象。實現匿名的遞歸函數。代碼以下:
var sum = function (n) { if (1 == n) { return 1; } else { return n + arguments.callee(n - 1); } } alert(sum(6));
輸出結果:21
通俗一點就是,arguments此對象大多用來針對同個方法多處調用而且傳遞參數個數不同時進行使用。根據arguments的索引來判斷執行的方法。
知識擴展:
當使用arguments進行函數傳遞時,有一些須要注意的點。例子以下:
var length = 10;
function fn() { console.log(this.length); } var obj = { method: function(fn) { fn(); arguments[0](); } }; obj.method(fn, 1);
輸出:10,2
這裏有2個須要注意的點。fn函數裏面的this的指向:
1.第一個值爲10,執行的是method裏面的第一行"fn()",這裏this指向的window。因此輸出的值爲最外層定義的length。
2.第二個值爲2,執行的是method裏面的第二行"arguments[0]()"(arguments[0]() => fn() ),這裏this執行的是arguments這個對象,因此輸出值爲arguments的長度
arguments 的用法和特性基本就是這麼多了。可能callee屬性用到的比較少。可是若是本身封裝或者寫一些js的時候 除了callee的東西基本都會用到。有不對的地方但願朋友們多多支出。你們共同進步。