1.概念
arguments
是一个对应于传递给函数的参数的类数组对象。主要用途是保存函数参数
2.理解
arguments
对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments
对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。例如,如果一个函数传递了三个参数,你可以以如下方式引用他们:
function func(a,b,c){ arguments[0]//对a的引用 arguments[1]//对b的引用 arguments[2]//对c的引用 }
参数也可以被设值:
arguments[1] = 'new value';
arguments
对象不是一个 Array
。它类似于Array
,但除了length属性和索引元素之外没有任何Array
属性。例如,它没有 pop 方法。但是它可以被转换为一个真正的Array
。
var args = Array.prototype.slice.call(arguments); var args = [].slice.call(arguments); // ES2015 const args = Array.from(arguments);
如果调用的参数多于正式声明接受的参数,则可以使用arguments
对象。这种技术对于可以传递可变数量的参数的函数很有用。使用 arguments.length
来确定传递给函数参数的个数,然后使用arguments
对象来处理每个参数。要确定函数签名中(输入)参数的数量,请使用Function.length
属性。
PS:arguments 对象只能在函数内使用
3.对对象参数使用typeof
console.log(typeof arguments); // 'object' // arguments 对象只能在函数内使用 function test(a){ console.log(a,Object.prototype.toString.call(arguments)); console.log(arguments[0],arguments[1]); 可以使用索引确定单个参数的类型。 console.log(typeof arguments[0]); } test(1); /* 1 "[object Arguments]" 1 undefined number */
4.使用扩展语法
您还可以使用Array.from()方法或扩展运算符将参数转换为真实数组: var args = Array.from(arguments); var args = [...arguments];
5.属性
5.1argument.callee
指向当前执行的函数,返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文,这有利于匿名函数的递归或者保证函数的封装性。
示例:阶乘的运算
function factorial(num){ if (num <=1) { return 1; } else { return num * arguments.callee(num-1); } }
PS:不推荐使用arguments.callee
原因:访问 arguments 是个很昂贵的操作,因为它是个很大的对象,每次递归调用时都需要重新创建。影响现代浏览器的性能,还会影响闭包。
代替方案:
给内部函数一个名字即可(当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。)
function factorial(num){ return (function func(num){ if (num <=1) { return 1; } else { return num * func(num-1); } }) }此参数的使用还可参考:https://blog.csdn.net/u013451157/article/details/78686881
5.2arguments.caller
指向调用当前函数的函数。
5.3arguments.length
指向传递给当前函数的参数数量。
5.4arguments[@@iterator]
返回一个新的Array迭代器对象,该对象包含参数中每个索引的值。 注意:现在在严格模式下,arguments
对象已与过往不同。arguments[@@iterator]
不再与函数的实际形参之间共享,同时caller属性也被移除。
6.示例
6.1遍历求和
function add() { var sum =0, len = arguments.length; for(var i=0; i<len; i++){ sum += arguments[i]; } return sum; } add() // 0 add(1) // 1 add(1,2,3,4); // 10
更多用法参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments#%E8%AF%AD%E6%B3%95