--- 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")}}