From a55b575e8089ee6cab7c5c262a7e6db55d0e34d6 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:46:50 +0100 Subject: unslug es: move --- .../reference/global_objects/function/index.html | 118 +++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 files/es/web/javascript/reference/global_objects/function/index.html (limited to 'files/es/web/javascript/reference/global_objects/function/index.html') diff --git a/files/es/web/javascript/reference/global_objects/function/index.html b/files/es/web/javascript/reference/global_objects/function/index.html new file mode 100644 index 0000000000..5b586f3611 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/index.html @@ -0,0 +1,118 @@ +--- +title: Function +slug: Web/JavaScript/Referencia/Objetos_globales/Function +tags: + - Clase + - Class + - Declaración + - Expresión + - Function + - JavaScript + - función +translation_of: Web/JavaScript/Reference/Global_Objects/Function +--- +
{{JSRef("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.

+ +

Constructor

+ +
+
{{jsxref("Function/Function", "Function()", "", 1)}}
+
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) para {{jsxref("eval")}}. Sin embargo, a diferencia de eval, el constructor Function crea funciones que solo se ejecutan en el ámbito global.
+
+ +

Propiedades de la instancia

+ +
+
{{jsxref("Function.arguments")}}
+
Un arreglo que corresponde a los argumentos pasados a una función.
+ Esto está obsoleto como propiedad de {{jsxref("Function")}}. En su lugar, utiliza el objeto {{jsxref("Functions/arguments", "arguments", "", 1)}} (disponible dentro de la función).
+
{{jsxref("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.
+
{{jsxref("Function.displayName")}}
+
El nombre a mostrar de la función.
+
{{jsxref("Function.length")}}
+
Especifica el número de argumentos que espera la función.
+
{{jsxref("Function.name")}}
+
El nombre de la función.
+
+ +

Métodos de instancia

+ +
+
{{jsxref("Function.prototype.apply()", "Function.prototype.apply(thisArg [, argsArray])")}}
+
Llama a una función y establece su this en el thisArg proporcionado. Los argumentos se pueden pasar como un objeto {{jsxref("Array")}}.
+
{{jsxref("Function.prototype.bind()", "Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])")}}
+
Crea una nueva función que, cuando se llama, tiene su 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.
+
{{jsxref("Function.prototype.call()", "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.
+
{{jsxref("Function.prototype.toString()", "Function.prototype.toString()")}}
+
Devuelve una cadena que representa el código fuente de la función.
+ Redefine el método {{jsxref("Object.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 {{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.

+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}
+ +

Compatibilidad del navegador

+ +
+ + +

{{Compat("javascript.builtins.Function")}}

+
+ +

Ve también

+ + -- cgit v1.2.3-54-g00ecf