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` 值。
(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
規範
不屬於任何標準。
瀏覽器相容性
載入中…