Skip to content

JS“零部件”

一些常用但不曾深入了解的零散知识点整理。

arguments

在 JavaScript 中,arguments 是一个特殊的对象(类数组)具有 length 属性,代表函数调用时传递的所有参数,包括那些没有在函数定义中声明的参数。arguments 可以用来访问所有传递给函数的参数,无论它们是否被声明。

js
function foo(a, b) {
  console.log((a == arguments[0]) == true); // true

  console.log(a); // 0
  console.log(b); // 1

  console.log(arguments[0]); // 0
  console.log(arguments[1]); // 1
  console.log(arguments[2]); // 2
}
foo(0, 1, 2);

上述代码中,函数 foo 只声明了两个参数ab,但是通过 arguments 对象,我们可以访问传递给函数的所有三个参数。

...args(rest parameters

...args语法可以定义一个函数的剩余参数(rest parameters)。即,剩余参数允许一个函数接收任意数量的参数,并将它们打包到一个数组里,以便在函数内部进行处理。

js
function foo(a, b, ...args) {
  console.log(a); // 0
  console.log(b); // 1
  console.log(args); // [2,3,4]
}
foo(0, 1, 2, 3, 4);

这里的 args仅仅是一个代指,可以是rest或其他自定义名称,关键点是它前面的 ... (展开运算符),如果函数的最后一个命名参数以 ... 为前缀,则它会将所有后面剩余的是实参个数包裹成一个数组。

arguments 和 ...rest (rest parameters) 异同点

  • 二者都能得到函数的未规定数量的所有参数;

  • arguments 表示函数的所有参数集合,是一个类数组对象,具有 length 属性;

  • ...args 表示一个函数的参数中未与形参相对应的剩余参数集合,是一个数组;

Released under the MIT License.