▋ arguments
是一个类数组对象,传递函数参数。如果调用的参数多于正式声明接受的参数,则可以使用
arguments
对象。这种技术对于可以传递可变数量的参数的函数很有用。
▍描述
干什么的呢?看个例子
比如写一个求和函数,但是呢,求和的话传递的参数是不确定的。用arguments
把参数集合起来。
function sum() {
let total = 0;
for ( let i = 0; i < arguments.length; i++ ){
total += arguments[i];
}
return total;
}
console.log(sum(1, 2, 3, 5));
但是argumnets
类似于Array
,却不是一个Array
。它的全部属性在上面的例子里已经被全用了,除了length
与索引元素以外,没有任何Array
的属性。
比如,还是这个例子,现在让arguments
使用reduce
(reduce
作用之一:累加对象数组的数值)。结果:error
function sum() {
return arguments.reduce((a, b) => a + b);
}
console.log(sum(1, 2, 3, 5));
// Uncaught TypeError: arguments.reduce is not a function
不过可以通过一些手段将arguments
变成数组,从而让他使用数组的属性。
- 扩展运算符:
[...arguments]
Array.from(arguments)
function sum() {
return [...arguments].reduce((a, b) => a + b);
// return Array.from(arguments).reduce((a, b) => a + b);
}
另,就这个求和,其实还可以这样
function sum(...args) {
return args.reduce((a, b) => a + b);
}
▍属性
没有Array
的大部分属性,但是也有属于自己的属性。
arguments.callee
指向参数所属的当前执行的函数。
指向调用当前函数的函数。
arguments.length
传递给函数的参数数量
arguments[@@iterator]
返回一个新的 Array 迭代器 对象,该对象包含参数中的每个索引的值。
arguments
对象已是今非昔比,在严格模式下,arguments[@@iterator]
不再与函数的实际形参之间共享,同时caller
属性也被移除。
▍例子
我暂时没有更多,点击查看更多