Arguments详解
Arguments特性
- arguments对象和Function是分不开的。
- 因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。
- 虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同。
- 在js中不需要明确指出参数名,就能访问它们。
Arguments相关属性
function fun(num) {
if(num<=1) {
return 1;
}else {
return num * arguments.callee(num-1);
}
}
console.log(fun(5));
- 利用arguments.length实现方法的重载
- arguments不是数组,而是一个类数组对象
- 重载的定义是指函数的方法名相同,但参数不同。
function add() {
var len = arguments.length,
sum = 0;
for(;len--;){
sum += arguments[len];
}
return sum;
}
console.log(add(1,3,5));
- 利用arguments[Symbol.iterator]的迭代器枚举的值
- Symbol类型的值都是独一无二的,该键指向的值是一个values函数
// 该值是一个生成迭代器的函数,下面是ES6入门的部分文档
let arr = ['a', 'b', 'c'];
let iter = arr[Symbol.iterator]();
console.log(iter.next()); // { value: 'a', done: false }
console.log(iter.next()); // { value: 'b', done: false }
console.log(iter.next()); // { value: 'c', done: false }
console.log(iter.next()); // { value: undefined, done: true }
function fun(){
console.log(arguments[Symbol.iterator]);
let iterator = arguments[Symbol.iterator]();
console.log('iterator:',iterator);
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
}
fun('tom',[1,2,3],{name:'Janny'});
ES6中替代arguments的rest参数
- 使用背景:es6的
- 优点:arguments是伪数组,而rest参数是真数组
function fn(...args){
console.log(args); //数组:[1,2,3,4,5]
}
fn(1,2,3,4,5)