1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
---
title: Function() constructor
slug: Web/JavaScript/Referencia/Objetos_globales/Function/Función
tags:
- Constructor
- Function
- JavaScript
- Referencia
- función
translation_of: Web/JavaScript/Reference/Global_Objects/Function/Function
---
<div>{{JSRef("Objetos_globales", "Function")}}</div>
<p><span class="seoSummary">El constructor <strong><code>Function</code></strong> crea un nuevo <strong>objeto</strong> <code>Function</code>. 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 <code>Function</code> crea funciones que solo se ejecutan en el ámbito global.</span></p>
<div>{{EmbedInteractiveExample("pages/js/function-constructor.html","shorter")}}</div>
<p class="hidden">La fuente de este ejemplo interactivo se almacena en un repositorio de GitHub. Si deseas contribuir al proyecto de ejemplos interactivos, clona <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> y envíanos una solicitud de extracción.</p>
<h2 id="Sintaxis">Sintaxis</h2>
<pre class="syntaxbox notranslate"><code>new Function([<var>arg1 </var>[, <var>arg2 </var>[, ...<var>argN</var>]] ,] <var>functionBody</var>)</code></pre>
<h3 id="Parámetros">Parámetros</h3>
<dl>
<dt><code><var>arg1</var>, <var>arg2</var>, ... <var>argN</var></code></dt>
<dd>Nombres que utilizará la función como nombres de argumentos formales. Cada uno debe ser una cadena que corresponda a un identificador JavaScript válido, o una lista de dichas cadenas separadas por una coma. Por ejemplo: "<code>x</code>", "<code>theValue</code>" —o "<code>x,theValue</code>".</dd>
<dt><code><var>functionBody</var></code></dt>
<dd>Una cadena que contiene las declaraciones de JavaScript que comprenden la definición de función.</dd>
</dl>
<h2 id="Descripción">Descripción</h2>
<p>Los objetos <code>Function</code> creados con el constructor <code>Function</code> se procesan cuando se crea la función. Esto es menos eficiente que declarar una función con una {{jsxref("Operators/function", "expresión de función")}} o {{jsxref("Statements/function", "declaración de función")}} y llamarla dentro de tu código porque tales funciones se procesan con el resto del código.</p>
<p>Todos los argumentos pasados a la función se tratan como los nombres de los identificadores de los parámetros en la función que se va a crear, en el orden en que se pasan. Omitir un argumento dará como resultado que el valor de ese parámetro sea <code>undefined</code>.</p>
<p>Invocar el constructor <code>Function</code> como función (sin usar el operador <code>new</code>) tiene el mismo efecto que invocarlo como constructor.</p>
<h2 id="Ejemplos">Ejemplos</h2>
<h3 id="Especificar_argumentos_con_el_constructor_Function">Especificar argumentos con el constructor Function</h3>
<p>El siguiente código crea un objeto <code>Function</code> que toma dos argumentos.</p>
<pre class="brush: js notranslate">// El ejemplo se puede ejecutar directamente en tu consola JavaScript
// Crea una función que toma dos argumentos y devuelve la suma de esos argumentos
const adder = new Function('a', 'b', 'return a + b');
// Llama a la función
adder(2, 6);
// 8
</pre>
<p>Los argumentos "<code>a</code>" y "<code>b</code>" son nombres de argumentos formales que se utilizan en el cuerpo de la función, "<code>return a + b</code>".</p>
<h2 id="Especificaciones">Especificaciones</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Especificación</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('ESDraft', '#sec-function-constructor', 'Constructor Function')}}</td>
</tr>
</tbody>
</table>
<h2 id="Compatibilidad_del_navegador">Compatibilidad del navegador</h2>
<div>
<div class="hidden">La tabla de compatibilidad de esta página se genera a partir de datos estructurados. Si deseas contribuir con los datos, consulta <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> y envíanos una solicitud de extracción.</div>
<p>{{Compat("javascript.builtins.Function.Function")}}</p>
</div>
<h2 id="Ve_también">Ve también</h2>
<ul>
<li>{{jsxref("Functions", "Funciones y ámbito de la función", "", 1)}}</li>
<li>{{jsxref("Statements/function", "Declaración de function")}}</li>
<li>{{jsxref("Operators/function*", "Expresión function*")}}</li>
<li>{{jsxref("Statements/function", "Declaración de function*")}}</li>
<li>{{jsxref("Operators/function*", "Expresión function*")}}</li>
<li>{{jsxref("AsyncFunction", "Función asíncrona", "", 1)}}</li>
<li>{{jsxref("GeneratorFunction", "Función generadora", "", 1)}}</li>
</ul>
|