Function.prototype.arguments

已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。

非標準:此特性未標準化。我們不建議在生產環境中使用非標準特性,因為它們瀏覽器支援有限,並且可能會更改或被移除。但是,在沒有標準選項的特定情況下,它們可以是合適的替代方案。

注意: Function 物件的 arguments 屬性已棄用。訪問 arguments 物件的推薦方式是引用函式內可用的 arguments 變數。

arguments 屬性是 Function 例項的一個訪問器屬性,它返回傳遞給該函式的引數。對於 嚴格模式、箭頭函式、非同步函式和生成器函式,訪問 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

規範

不屬於任何標準。

瀏覽器相容性

另見