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

BCD tables only load in the browser

Véase también