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:

js
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:

js
"use strict";
function sum(a = 1, b = 2) {
  return a + b;
}

Expresión Function

Una expresión function puede usar otra solución alternativa:

js
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:

js
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:

js
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:

js
var callback = (() => {
  "use strict";
  return (...args) => {
    return this.run(args);
  };
})();

Ve también