
一、簡介
了解arguments這個(gè)對(duì)象之前先來認(rèn)識(shí)一下javascript的一些功能:
其實(shí)Javascript并沒有重載函數(shù)的功能,但是Arguments對(duì)象能夠模擬重載。Javascrip中每個(gè)函數(shù)都會(huì)有一個(gè)Arguments對(duì)象實(shí)例arguments,它引用著函數(shù)的實(shí)參,可以用數(shù)組下標(biāo)的方式"[]"引用arguments的元素。arguments.length為函數(shù)實(shí)參個(gè)數(shù),arguments.callee引用函數(shù)自身。


arguments.callee與形參是一一映射


二、特點(diǎn)
1.arguments對(duì)象和Function是分不開的。
2.因?yàn)閍rguments這個(gè)對(duì)象不能顯式創(chuàng)建。
3.arguments對(duì)象只有函數(shù)開始時(shí)才可用。
三、使用方法
雖然arguments對(duì)象并不是一個(gè)數(shù)組(類數(shù)組),但是訪問單個(gè)參數(shù)的方式與訪問數(shù)組元素的方式相同
例如:
arguments[0],arguments[1],。。。arguments[n]; 在js中 不需要明確指出參數(shù)名,就能訪問它們
例如:
function test() {
var s = "";
for (var i = 0; i < arguments.length; i++) {
alert(arguments[i]);
s += arguments[i] + ",";
}
return s;
}
test("name", "age");
輸出結(jié)果:
name,age
我們知道每一個(gè)對(duì)象都有自己的屬性,arguments對(duì)象也不例外,首先arguments的訪問猶如Array對(duì)象一樣,用0到arguments.length-1來枚舉每一個(gè)元素。下面我們來看看callee屬性,返回正被執(zhí)行的** Function** 對(duì)象,也就是所指定的 Function 對(duì)象的正文。callee 屬性是 arguments 對(duì)象的一個(gè)成員,僅當(dāng)相關(guān)函數(shù)正在執(zhí)行時(shí)才可用。callee 屬性的初始值就是正被執(zhí)行的** Function** 對(duì)象。實(shí)現(xiàn)匿名的遞歸函數(shù)。代碼如下:
var sum = function (n) {
if (1 == n) {
return 1;
} else {
return n + arguments.callee(n - 1); //6 5 4 3 2 1
}
}
alert(sum(6));
輸出結(jié)果:21
通俗一點(diǎn)就是,arguments此對(duì)象大多用來針對(duì)同個(gè)方法多處調(diào)用并且傳遞參數(shù)個(gè)數(shù)不一樣時(shí)進(jìn)行使用。根據(jù)arguments的索引來判斷執(zhí)行的方法。
知識(shí)擴(kuò)展:
當(dāng)使用arguments進(jìn)行函數(shù)傳遞時(shí),有一些需要注意的點(diǎn)。例子如下:
var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
method: function(fn) {
fn();
arguments[0]();
}
};
obj.method(fn, 1);
輸出:10,2
這里有2個(gè)需要注意的點(diǎn)。fn函數(shù)里面的this的指向:
1.第一個(gè)值為10,執(zhí)行的是method里面的第一行"fn()",這里this指向的window。所以輸出的值為最外層定義的length。
2.第二個(gè)值為2,執(zhí)行的是method里面的第二行"arguments0"(arguments0 => fn() ),這里this執(zhí)行的是arguments這個(gè)對(duì)象,所以輸出值為arguments的長度
arguments 的用法和特性基本就是這么多了??赡躢allee屬性用到的比較少。但是如果自己封裝或者寫一些js的時(shí)候 除了callee的東西基本都會(huì)用到。有不對(duì)的地方希望朋友們多多支出。大家共同進(jìn)步。
傳多個(gè)參數(shù)事可以直接用argument,比如求最大值:
function max() {
var max = arguments[0];
console.log(arguments)
for (val of arguments) {
if (val >= max) {
max = val;
}
}
return max;
}
var maxValue = max('9', 1, 2, 4)
console.log(maxValue)