arguments用法
2019-08-22 本文已影响0人
Artifacts
参考
arguments指的是函数内置的实参集合
JS的一个内置对象,JS传的是形参,可传可不传,若方法里没有写参数却传入了参数,需要用arguments拿到参数
- arguments转换成一个真正的数组
var args = Array.prototype.slice.call(arguments); //现在args就是一个标准的js数组了,可以使用数组的标准方法了。
- 特性:
arguments对象和Function是分不开的。因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。 - 使用方法:
虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同
例如:
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));
通俗一点就是,arguments此对象大多用来针对同个方法多处调用并且传递参数个数不一样时进行使用。根据arguments的索引来判断执行的方法。
// arguments函数内置的实参集合
// 任意数求和(执行函数的时候,传递N个值实现求和)
/*
*1.传递实参的个数不定
*2.传递的值是否为有效数字不定
* =>把传递的有效数字进行相加求和
* arguments函数内置的实参集合
* 1.类数组集合,集合中存储着所有函数执行时,传递的实参信息
* 2.不论是否设置形参,arguments都存在
* 3.不论是否传递实参,arguments也都存在
* argumenys.callee:存储的是当前函数本身(js严格模式下禁止使用这些属性)
*/
function sum(){
// console.log(arguments,n,m);
let total = null;
for(let i = 0;i<arguments.length;i++){
// 获取的每一项的结果都要先转化为数字(数学运算)
let item = Number(arguments[i]);
// 非有效数字不加
if(isNaN(item)){
continue;
}
total +=item;
}
return total;
}
let total = sum(10,20,30,40);
console.log(total);//100
total = sum(10,20);
console.log(total);//30
total = sum(10,20,'30');
console.log(total);//3030
total = sum(10,'AA');
console.log(total);//30AA