Function.prototype.arguments

已弃用:此功能不再推荐。尽管一些浏览器可能仍然支持它,但它可能已被从相关的 Web 标准中删除,可能正在被弃用,或者可能只是为了兼容性而保留。避免使用它,并尽可能更新现有代码;请参阅此页面底部的兼容性表来指导您的决定。请注意,此功能可能在任何时候停止工作。

非标准:此功能是非标准的,也不在标准化轨道上。不要在面向 Web 的生产网站上使用它:它不会对每个用户都有效。不同实现之间也可能存在很大的不兼容性,并且行为可能会在将来发生改变。

注意:Function 对象的 arguments 属性已弃用。访问 arguments 对象的推荐方法是引用函数中可用的 arguments 变量。

argumentsFunction 实例的访问器属性,它返回传递给此函数的参数。对于严格、箭头、异步和生成器函数,访问 arguments 属性将抛出 TypeError

描述

arguments 的值是一个类似数组的对象,对应于传递给函数的参数。

在递归的情况下,即如果函数 f 在调用堆栈中出现多次,f.arguments 的值表示函数最近一次调用的参数。

如果函数正在进行的调用(即函数已被调用但尚未返回)没有挂起,arguments 属性的值通常为 null

请注意,ECMAScript 规范中指定的唯一行为是 Function.prototype 具有一个初始的 arguments 访问器,该访问器对任何 getset 请求都无条件抛出 TypeError(称为“毒药访问器”),并且实现不允许为除非严格的普通函数以外的任何函数更改此语义。arguments 属性的实际行为,如果它不是抛出错误,则是由实现定义的。例如,Chrome 将其定义为一个自己的数据属性,而 Firefox 和 Safari 扩展了初始的毒药 Function.prototype.arguments 访问器以专门处理非严格函数的 this 值。

js
(function f() {
  if (Object.hasOwn(f, "arguments")) {
    console.log(
      "arguments is an own property with descriptor",
      Object.getOwnPropertyDescriptor(f, "arguments"),
    );
  } else {
    console.log(
      "f doesn't have an own property named arguments. Trying to get f.[[Prototype]].arguments",
    );
    console.log(
      Object.getOwnPropertyDescriptor(
        Object.getPrototypeOf(f),
        "arguments",
      ).get.call(f),
    );
  }
})();

// In Chrome:
// arguments is an own property with descriptor {value: Arguments(0), writable: false, enumerable: false, configurable: false}

// In Firefox:
// f doesn't have an own property named arguments. Trying to get f.[[Prototype]].arguments
// Arguments { … }

示例

使用 arguments 属性

js
function f(n) {
  g(n - 1);
}

function g(n) {
  console.log(`before: ${g.arguments[0]}`);
  if (n > 0) {
    f(n);
  }
  console.log(`after: ${g.arguments[0]}`);
}

f(2);

console.log(`returned: ${g.arguments}`);

// Logs:
// before: 1
// before: 0
// after: 0
// after: 1
// returned: null

规范

不属于任何标准。

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅