JavaScript里函数参数arguments

51 阅读2分钟

JavaScript里函数参数arguments

在 JavaScript 中,arguments 是一个类数组对象,用于访问函数调用时传入的所有参数。以下是关于 arguments 的详细说明及使用场景。

1. arguments 的特性

  • 类数组对象arguments 类似于数组,但并非真正的数组,没有数组的方法(如 pushforEach)。
  • 包含所有参数:无论是否定义形参,arguments 都会包含所有传入的参数。
  • 仅在函数内部可用arguments 是函数内部的局部变量。

2. 基本用法

(1) 访问参数

function sum() {
  let total = 0;
  for (let i = 0; i < arguments.length; i++) {
    total += arguments[i];
  }
  return total;
}

console.log(sum(1, 2, 3)); // 输出:6

(2) 与形参的关系

  • arguments 与形参是动态绑定的。
  • 修改 arguments 会影响形参,反之亦然。

示例

function update(a, b) {
  arguments[0] = 10; // 修改 arguments
  console.log(a); // 输出:10(形参被修改)
  a = 20; // 修改形参
  console.log(arguments[0]); // 输出:20(arguments 被修改)
}
update(1, 2);

3. 注意事项

(1) 严格模式

  • 在严格模式下,arguments 与形参的绑定被移除,修改 arguments 不会影响形参。
    function strictExample(a, b) {
      'use strict';
      arguments[0] = 10;
      console.log(a); // 输出:1(形参未被修改)
    }
    strictExample(1, 2);
    

(2) 箭头函数

  • 箭头函数没有自己的 arguments 对象,会继承外层函数的 arguments
    const arrowFunction = () => {
      console.log(arguments); // 报错:arguments 未定义
    };
    arrowFunction(1, 2, 3);
    

(3) 类数组对象

  • arguments 是类数组对象,不能直接使用数组方法(如 mapforEach)。
  • 可以通过 Array.from() 或扩展运算符转换为数组。
    function convertToArray() {
      const argsArray = Array.from(arguments);
      console.log(argsArray); // 输出:[1, 2, 3]
    }
    convertToArray(1, 2, 3);
    

4. 替代方案

(1) 剩余参数(Rest Parameters)

  • 使用 ... 语法将参数收集到数组中。
  • arguments 的现代替代方案。

示例

function sum(...numbers) {
  return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3)); // 输出:6

(2) 默认参数

  • 为参数设置默认值,避免手动检查 arguments

示例

function greet(name = 'Guest') {
  console.log(`Hello, ${name}`);
}
greet(); // 输出:Hello, Guest

总结

特性arguments剩余参数(...
类型类数组对象真正的数组
使用场景访问所有参数收集剩余参数
严格模式与形参解耦无影响
箭头函数不可用可用
推荐使用不推荐(优先使用剩余参数)推荐

arguments 是 JavaScript 早期用于访问函数参数的方式,但在现代开发中,推荐使用 剩余参数默认参数,代码更简洁、可读性更高。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github