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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
---
title: 'SyntaxError: "use strict" no permitida en función con parámetros complejos'
slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params
tags:
- Error
- JavaScript
- TypeError
- errores
translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params
original_slug: Web/JavaScript/Reference/Errors/Strict_y_parámetros_complejos
---
<div>{{jsSidebar("Errors", "Errores")}}</div>
<p>La excepción de JavaScript: "<code>'use strict' no permitida en función</code>" ocurre cuando se usa una directiva <code>"use strict"</code> en la parte superior de una función con {{jsxref("Functions/Default_parameters", "parámetros predeterminados", "", 1)}}, {{jsxref("Functions/rest_parameters", "parámetros rest", "", 1)}} o {{jsxref("Operators/Destructuring_assignment" , "Desestructuración de parámetros", "", 1)}}.</p>
<h2 id="Mensaje">Mensaje</h2>
<pre class="syntaxbox notranslate">Edge:
No se puede aplicar el modo estricto en funciones con una lista de parámetros complejos
Firefox:
SyntaxError: "use strict" no permitido en la función con parámetro predeterminado
SyntaxError: "use strict" no permitido en la función con parámetro rest
SyntaxError: "use strict" no permitido en la función con parámetro de desestructuración
Chrome:
SyntaxError: directiva ilegal 'use strict' en función con una lista de parámetros complejos
</pre>
<h2 id="Tipo_Error">Tipo <code>Error</code></h2>
<p>{{jsxref("SyntaxError")}}.</p>
<h2 id="¿Qué_salió_mal">¿Qué salió mal?</h2>
<p>Se escribió una directiva <code>"use strict"</code> en la parte superior de una función que tiene uno de los siguientes parámetros:</p>
<ul>
<li>{{jsxref("Functions/Default_parameters", "Parámetros predeterminados", "", 1)}}</li>
<li>{{jsxref("Functions/rest_parameters", "Parámetros rest", "", 1)}}</li>
<li>{{jsxref("Operators/Destructuring_assignment", "Desestructuración de parámetros", "", 1)}}</li>
</ul>
<p>No está permitida una directiva <code>"use strict"</code> en la parte superior de dichas funciones según la especificación ECMAScript.</p>
<h2 id="Ejemplos">Ejemplos</h2>
<h3 id="Declaración_de_función">Declaración de función</h3>
<p>En este caso, la función <code>sum</code> tiene los parámetros predeterminados <code>a = 1</code> y <code>b = 2</code>:</p>
<pre class="brush: js example-bad notranslate">function sum(a = 1, b = 2) {
SyntaxError: 'use strict' no permitida en la función con parámetros predeterminados
'use strict';
return a + b;
}
</pre>
<p>Si la función debe estar en <a href="/es/docs/Web/JavaScript/Reference/Strict_mode">modo estricto</a>, y todo el script o la función adjunta también está bien que esté en modo estricto, puedes mover la directiva <code>"use strict"</code> fuera de la función:</p>
<pre class="brush: js example-good notranslate">'use strict';
function sum(a = 1, b = 2) {
return a + b;
}
</pre>
<h3 id="Expresión_Function">Expresión <code>Function</code></h3>
<p>Una expresión <code>function</code> puede usar otra solución alternativa:</p>
<pre class="brush: js example-bad notranslate">var sum = function sum([a, b]) {
// SyntaxError: "use strict" no permitido en función con parámetros de desestructuración
'use strict';
return a + b;
};
</pre>
<p>Esta se puede convertir a la siguiente expresión:</p>
<pre class="brush: js example-good notranslate">var sum = (function() {
'use strict';
return function sum([a, b]) {
return a + b;
};
})();
</pre>
<h3 id="Función_de_flecha">Función de flecha</h3>
<p>Si una función de flecha necesita acceder a la variable <code>this</code>, puedes usar la función de flecha como función circundante:</p>
<pre class="brush: js example-bad notranslate">var callback = (...args) => {
SyntaxError: "use strict" no permitido en la función con parámetro rest
'use strict';
return this.run(args);
};
</pre>
<p>Esta se puede convertir a la siguiente expresión:</p>
<pre class="brush: js example-good notranslate">var callback = (() => {
'use strict';
return (...args) => {
return this.run(args);
};
})();
</pre>
<h2 id="Ve_también">Ve también</h2>
<ul>
<li>{{jsxref("Strict_mode", "Modo estricto", "", 1)}}</li>
<li>{{jsxref("Statements/function", "Declaración de función", "", 1)}}</li>
<li>{{jsxref("Operators/function", "Expresión function", "", 1)}}</li>
<li>{{jsxref("Functions/Default_parameters", "Parámetros predeterminados", "", 1)}}</li>
<li>{{jsxref("Functions/rest_parameters", "Parámetros rest", "", 1)}}</li>
<li>{{jsxref("Operators/Destructuring_assignment", "Desestructuración de parámetros", "", 1)}}</li>
</ul>
|