SyntaxError: "use strict" no permitida en función con parámetros complejos
La excepción de JavaScript: "'use strict' no permitida en función
" ocurre cuando se usa una directiva "use strict"
en la parte superior de una función con parámetros predeterminados, parámetros rest o Desestructuración de parámetros.
Mensaje
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
Tipo Error
¿Qué salió mal?
Se escribió una directiva "use strict"
en la parte superior de una función que tiene uno de los siguientes parámetros:
No está permitida una directiva "use strict"
en la parte superior de dichas funciones según la especificación ECMAScript.
Ejemplos
Declaración de función
En este caso, la función sum
tiene los parámetros predeterminados a = 1
y b = 2
:
function sum(a = 1, b = 2) {
SyntaxError: 'use strict' no permitida en la función con parámetros predeterminados
'use strict';
return a + b;
}
Si la función debe estar en modo estricto, y todo el script o la función adjunta también está bien que esté en modo estricto, puedes mover la directiva "use strict"
fuera de la función:
"use strict";
function sum(a = 1, b = 2) {
return a + b;
}
Expresión Function
Una expresión function
puede usar otra solución alternativa:
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;
};
Esta se puede convertir a la siguiente expresión:
var sum = (function () {
"use strict";
return function sum([a, b]) {
return a + b;
};
})();
Función de flecha
Si una función de flecha necesita acceder a la variable this
, puedes usar la función de flecha como función circundante:
var callback = (...args) => {
SyntaxError: "use strict" no permitido en la función con parámetro rest
'use strict';
return this.run(args);
};
Esta se puede convertir a la siguiente expresión:
var callback = (() => {
"use strict";
return (...args) => {
return this.run(args);
};
})();