--- title: Function slug: Web/JavaScript/Reference/Global_Objects/Function tags: - Clase - Class - Declaración - Expresión - Function - JavaScript - función translation_of: Web/JavaScript/Reference/Global_Objects/Function original_slug: Web/JavaScript/Referencia/Objetos_globales/Function ---
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.
Function. Llamar al constructor directamente puede crear funciones dinámicamente, pero tiene problemas de seguridad y de rendimiento similares (pero mucho menos importantes) para {{jsxref("eval")}}. Sin embargo, a diferencia de eval, el constructor Function crea funciones que solo se ejecutan en el ámbito global.this en el thisArg proporcionado. Los argumentos se pueden pasar como un objeto {{jsxref("Array")}}.this configurado en el thisArg. Opcionalmente, una determinada secuencia de argumentos se antepondrá a los argumentos siempre que se llame a la función recién invocada.this en el valor proporcionado. Los argumentos se pueden pasar tal cual.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 {{jsxref("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.
| Especificación |
|---|
| {{SpecName('ESDraft', '#sec-function-objects', 'Function')}} |
{{Compat("javascript.builtins.Function")}}