Function.prototype.arguments
已弃用:此功能不再推荐。尽管一些浏览器可能仍然支持它,但它可能已被从相关的 Web 标准中删除,可能正在被弃用,或者可能只是为了兼容性而保留。避免使用它,并尽可能更新现有代码;请参阅此页面底部的兼容性表来指导您的决定。请注意,此功能可能在任何时候停止工作。
非标准:此功能是非标准的,也不在标准化轨道上。不要在面向 Web 的生产网站上使用它:它不会对每个用户都有效。不同实现之间也可能存在很大的不兼容性,并且行为可能会在将来发生改变。
arguments
是 Function
实例的访问器属性,它返回传递给此函数的参数。对于严格、箭头、异步和生成器函数,访问 arguments
属性将抛出 TypeError
。
描述
arguments
的值是一个类似数组的对象,对应于传递给函数的参数。
在递归的情况下,即如果函数 f
在调用堆栈中出现多次,f.arguments
的值表示函数最近一次调用的参数。
如果函数正在进行的调用(即函数已被调用但尚未返回)没有挂起,arguments
属性的值通常为 null
。
请注意,ECMAScript 规范中指定的唯一行为是 Function.prototype
具有一个初始的 arguments
访问器,该访问器对任何 get
或 set
请求都无条件抛出 TypeError
(称为“毒药访问器”),并且实现不允许为除非严格的普通函数以外的任何函数更改此语义。arguments
属性的实际行为,如果它不是抛出错误,则是由实现定义的。例如,Chrome 将其定义为一个自己的数据属性,而 Firefox 和 Safari 扩展了初始的毒药 Function.prototype.arguments
访问器以专门处理非严格函数的 this
值。
(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 属性
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 表格仅在浏览器中加载