Function.prototype.arguments
已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。
非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。
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` 值。
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
规范
不属于任何标准。
浏览器兼容性
加载中…