Function.prototype.arguments

Obsoleto: Esta característica ya no se recomienda. Aunque es posible que algunos navegadores aún lo admitan, probablemente ya se ha eliminado de los estándares web relevantes, está en proceso de eliminación o solo se conserva por motivos de compatibilidad. Evite usarlo y actualice el código existente si es posible; consulte la tabla de compatibilidad en la parte inferior de esta página para orientar su decisión. Tenga en cuenta que esta característica puede dejar de funcionar en cualquier momento.

No estándar: Esta característica no es parte de los estándares. No la uses en sitios Web en producción: no funcionará para todos los usuarios. Podrían haber también incompatibilidades considerables entre distintas implementaciones y el comportamiento podría cambiar en el futuro.

Nota: La propiedad arguments de los objetos Function está en desuso. La forma recomendada de acceder al objeto arguments es hacer referencia a la variable arguments disponible dentro de las funciones.

La propiedad de acceso arguments de instancias de Function devuelve los argumentos pasados ​​a esta función. Para las funciones strict, flecha , asíncronas y generadoras, acceder a la propiedad arguments arroja un TypeError.

Descripción

El valor de arguments es un objeto similar a un arreglo correspondiente a los argumentos pasados ​​a una función.

En el caso de recursividad, es decir, si la función f aparece varias veces en la pila de llamadas, el valor de f.arguments representa los argumentos correspondientes a la invocación más reciente de la función.

El valor de la propiedad arguments normalmente es null si no hay una invocación pendiente de la función en progreso (es decir, la función ha sido llamada pero aún no ha devuelto).

Tenga en cuenta que el único comportamiento especificado por la especificación ECMAScript es que Function.prototype tiene un descriptor de acceso inicial arguments que arroja incondicionalmente un TypeError para cualquier solicitud get o set (conocida como "poison pill accessor" -accesor de píldora envenenada-), y que las implementaciones no pueden cambiar esta semántica para ninguna función, excepto funciones simples no estrictas. El comportamiento real de la propiedad arguments, si es algo más que arrojar un error, es definido en la implementación Por ejemplo, Chrome lo define como una propiedad de datos propia, mientras que Firefox y Safari extienden el descriptor de acceso inicial Function.prototype.arguments de la píldora venenosa para manejar especialmente los valores this que son funciones no estrictas.

js
(function f() {
  if (Object.hasOwn(f, "arguments")) {
    console.log(
      "arguments es una propiedad propia con descriptor",
      Object.getOwnPropertyDescriptor(f, "arguments"),
    );
  } else {
    console.log(
      "f no tiene una propiedad propia llamada argumentos. Tratando de obtener f.[[Prototype]].arguments",
    );
    console.log(
      Object.getOwnPropertyDescriptor(
        Object.getPrototypeOf(f),
        "arguments",
      ).get.call(f),
    );
  }
})();

// En Chrome:
// arguments es una propiedad propia con descriptor {value: Arguments(0), writable: false, enumerable: false, configurable: false}

// En Firefox:
// f no tiene una propiedad propia llamada argumentos. Tratando de obtener f.[[Prototype]].arguments
// Arguments { … }

Ejemplos

Usando la propiedad arguments

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

function g(n) {
  console.log(`antes: ${g.arguments[0]}`);
  if (n > 0) {
    f(n);
  }
  console.log(`después: ${g.arguments[0]}`);
}

f(2);

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

// Logs:
// antes: 1
// antes: 0
// después: 0
// después: 1
// devuelto: null

Especificaciones

Not part of any standard.

Compatibilidad con navegadores

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
arguments
DeprecatedNon-standard

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Non-standard. Check cross-browser support before using.
Deprecated. Not for use in new websites.

Véase también