多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
**`arguments`** 是一个对应于传递给函数的参数的类数组对象。 ## 语法 ~~~ arguments ~~~ ## 描述 `arguments`对象是所有(非箭头)函数中都可用的**局部变量**。你可以使用`arguments`对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。例如,如果一个函数传递了三个参数,你可以以如下方式引用他们: ~~~js arguments[0] arguments[1] arguments[2] ~~~ 参数也可以被设置: ~~~js arguments[1] = 'new value'; ~~~ `arguments`对象不是一个[`Array`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Array "REDIRECT Array") 。它类似于`Array`,但除了length属性和索引元素之外没有任何`Array`属性。例如,它没有 [pop](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/pop "JavaScript/Reference/Global_Objects/Array/pop") 方法。但是它可以被转换为一个真正的`Array`: ~~~js var args = Array.prototype.slice.call(arguments); var args = [].slice.call(arguments); // ES2015 const args = Array.from(arguments); const args = [...arguments]; ~~~ ### 对参数使用扩展语法 您还可以使用[`Array.from()`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/from "Array.from() 方法从一个类似数组或可迭代对象中创建一个新的,浅拷贝的数组实例。")方法或[扩展运算符](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_operator)将参数转换为真实数组: ~~~js var args = Array.from(arguments); var args = [...arguments]; ~~~ ## 例子 ### 遍历参数求和 ~~~js 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 ~~~ ### 定义连接字符串的函数 这个例子定义了一个函数来连接字符串。这个函数唯一正式声明了的参数是一个字符串,该参数指定一个字符作为衔接点来连接字符串。该函数定义如下: ~~~js function myConcat(separator) { var args = Array.prototype.slice.call(arguments, 1); return args.join(separator); } ~~~ 你可以传递任意数量的参数到该函数,并使用每个参数作为列表中的项创建列表。 ~~~js // returns "red, orange, blue" myConcat(", ", "red", "orange", "blue"); // returns "elephant; giraffe; lion; cheetah" myConcat("; ", "elephant", "giraffe", "lion", "cheetah"); // returns "sage. basil. oregano. pepper. parsley" myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley"); ~~~ ### 定义创建HTML列表的方法 这个例子定义了一个函数通过一个字符串来创建HTML列表。这个函数唯一正式声明了的参数是一个字符。当该参数为 "`u`" 时,创建一个无序列表 (项目列表);当该参数为 "`o`" 时,则创建一个有序列表 (编号列表)。该函数定义如下: ~~~js function list(type) { var result = "<" + type + "l><li>"; var args = Array.prototype.slice.call(arguments, 1); result += args.join("</li><li>"); result += "</li></" + type + "l>"; // end list return result; } ~~~ 你可以传递任意数量的参数到该函数,并将每个参数作为一个项添加到指定类型的列表中。例如: ~~~js var listHTML = list("u", "One", "Two", "Three"); /* listHTML is: "<ul><li>One</li><li>Two</li><li>Three</li></ul>" */ ~~~