Cada funci贸n de JavaScript en realidad es un objeto Function
. Esto se puede ver con el c贸digo (function() {}).constructor === Function
, que devuelve true
.
Constructor
- Function()
- Crea un nuevo objeto
Function
. Llamar al constructor directamente puede crear funciones din谩micamente, pero tiene problemas de seguridad y de rendimiento similares (pero mucho menos importantes) paraeval
. Sin embargo, a diferencia deeval
, el constructorFunction
crea funciones que solo se ejecutan en el 谩mbito global.
Propiedades de la instancia
Function.arguments
- Un arreglo que corresponde a los argumentos pasados a una funci贸n.
Esto est谩 obsoleto como propiedad deFunction
. En su lugar, utiliza el objeto arguments (disponible dentro de la funci贸n). Function.caller
- Especifica la funci贸n que invoc贸 a la funci贸n que se est谩 ejecutando actualmente.
Esta propiedad est谩 obsoleta, y solo es funcional para algunas funciones no estrictas. Function.displayName
- El nombre a mostrar de la funci贸n.
Function.length
- Especifica el n煤mero de argumentos que espera la funci贸n.
Function.name
- El nombre de la funci贸n.
M茅todos de instancia
Function.prototype.apply(thisArg [, argsArray])
- Llama a una funci贸n y establece su
this
en elthisArg
proporcionado. Los argumentos se pueden pasar como un objetoArray
. Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])
- Crea una nueva funci贸n que, cuando se llama, tiene su
this
configurado en elthisArg
. Opcionalmente, una determinada secuencia de argumentos se antepondr谩 a los argumentos siempre que se llame a la funci贸n reci茅n invocada. Function.prototype.call(thisArg[, arg1, arg2, ...argN])
- Llama a una funci贸n y establece su
this
en el valor proporcionado. Los argumentos se pueden pasar tal cual. Function.prototype.toString()
- Devuelve una cadena que representa el c贸digo fuente de la funci贸n.
Redefine el m茅todoObject.prototype.toString()
.
Ejemplos
Diferencia entre el constructor Function y la declaraci贸n function
Las funciones creadas con el constructor Function
no crean cierres para sus contextos de creaci贸n; siempre se crean en el 谩mbito global. Al ejecutarlos, solo podr谩n acceder a sus propias variables locales y globales, no a las del 谩mbito en el que se cre贸 el constructor Function
. Esto es diferente de usar eval
con c贸digo para una expresi贸n de funci贸n.
var x = 10;
function createFunction1() {
var x = 20;
return new Function('return x;'); // esta |x| se refiere a la |x| global
}
function createFunction2() {
var x = 20;
function f() {
return x; // esta |x| se refiere a la |x| local
}
return f;
}
var f1 = createFunction1();
console.log(f1()); // 10
var f2 = createFunction2();
console.log(f2()); // 20
Si bien este c贸digo funciona en los navegadores web, f1()
producir谩 un ReferenceError
en Node.js, ya que no encontrar谩 a x
. Esto se debe a que el 谩mbito de nivel superior en Node no es el 谩mbito global, y x
ser谩 local para el m贸dulo.
Especificaciones
Compatibilidad del navegador
BCD tables only load in the browser
Ve tambi茅n
- Funciones y 谩mbito de la funci贸n
- Declaraci贸n
function
- Expresi贸n
function
- Declaraci贸n
function*
- Expresi贸n
function*
- Funci贸n as铆ncrona
- Funci贸n generadora