La opción --fix
en la línea de comandos puede arreglar automáticamente algunos de los problemas reportados por esta regla.
Una directiva de modo estricto es un "use strict"
literal al principio del cuerpo de un script o función. Activa la semántica del modo estricto.
Cuando una directiva ocurre en el ámbito global, el modo estricto se aplica a todo el script:
"use strict";// strict modefunction foo() { // strict mode}
Cuando una directiva ocurre al principio del cuerpo de una función, el modo estricto se aplica sólo a esa función, incluyendo todas las funciones contenidas:
function foo() { "use strict"; // strict mode}function foo2() { // not strict mode};(function() { "use strict"; function bar() { // strict mode }}());
En el sistema de módulos CommonJS, una función oculta envuelve cada módulo y limita el alcance de una directiva de modo estricto «global».
En los módulos ECMAScript, que siempre tienen semántica de modo estricto, las directivas son innecesarias.
Detalles de la regla
Esta regla requiere o desestima las directivas de modo estricto.
Esta regla desautoriza las directivas de modo estricto, sin importar la opción especificada, si la configuración de ESLint especifica cualquiera de las siguientes como opciones del analizador:
-
"sourceType": "module"
es decir, los archivos son módulos ECMAScript -
"impliedStrict": true
propiedad en el objetoecmaFeatures
-
Esta regla no permite las directivas de modo estricto, independientemente de la opción que se especifique, en funciones con listas de parámetros no simples (por ejemplo, listas de parámetros con valores de parámetros por defecto) porque eso es un error de sintaxis en ECMAScript 2016 y posteriores. Ver los ejemplos de la opción de función.
La opción
--fix
en la línea de comandos no inserta nuevas sentencias"use strict"
, sino que sólo elimina las sentencias innecesarias.Opciones
Esta regla tiene una opción de cadena:
-
"safe"
(por defecto) corresponde cualquiera de las siguientes opciones:-
"global"
si ESLint considera que un archivo es un módulo CommonJS -
"function"
en caso contrario
-
-
"global"
requiere una directiva de modo estricto en el ámbito global (y desestima cualquier otra directiva de modo estricto) -
"function"
requiere una directiva de modo estricto en cadanivel superior (y no permite ninguna otra directiva de modo estricto) -
"never"
no permite directivas de modo estricto - .
safe
La opción
"safe"
corresponde a la opción"global"
si ESLint considera que un archivo es un módulo Node.js o módulo CommonJS porque la configuración especifica cualquiera de los siguientes:-
node
ocommonjs
entornos -
"globalReturn": true
propiedad en elecmaFeatures
objeto de las opciones del analizador
De lo contrario, la opción
"safe"
corresponde a la opción"function"
. Tenga en cuenta que si"globalReturn": false
se especifica explícitamente en la configuración, la opción"safe"
se corresponderá con la opción"function"
independientemente del entorno especificado.global
Ejemplos de código incorrecto para esta regla con la opción
"global"
:/*eslint strict: */function foo() {}
/*eslint strict: */function foo() { "use strict";}
/*eslint strict: */"use strict";function foo() { "use strict";}
Ejemplos de código correcto para esta regla con la opción
"global"
:/*eslint strict: */"use strict";function foo() {}
función
Esta opción asegura que todos los cuerpos de las funciones son código en modo estricto, mientras que el código global no lo es. Especialmente si un paso de compilación concatena varios scripts, una directiva de modo estricto en el código global de un script podría habilitar involuntariamente el modo estricto en otro script que no estaba destinado a ser código estricto.
Ejemplos de código incorrecto para esta regla con la opción
"function"
:/*eslint strict: */"use strict";function foo() {}
/*eslint strict: */function foo() {}(function() { function bar() { "use strict"; }}());
/*eslint strict: *//*eslint-env es6*/// Illegal "use strict" directive in function with non-simple parameter list.// This is a syntax error since ES2016.function foo(a = 1) { "use strict";}// We cannot write "use strict" directive in this function.// So we have to wrap this function with a function with "use strict" directive.function foo(a = 1) {}
Ejemplos de código correcto para esta regla con la opción
"function"
:/*eslint strict: */function foo() { "use strict";}(function() { "use strict"; function bar() { } function baz(a = 1) { }}());var foo = (function() { "use strict"; return function foo(a = 1) { };}());
nunca
Ejemplos de código incorrecto para esta regla con la opción
"never"
:/*eslint strict: */"use strict";function foo() {}
/*eslint strict: */function foo() { "use strict";}
Ejemplos de código correcto para esta regla con la opción
"never"
:/*eslint strict: */function foo() {}
Por defecto anterior (eliminado)
La opción por defecto (es decir, sin opción de cadena especificada) para esta regla fue eliminada en ESLint v1.0. La opción
"function"
es la más parecida a la opción eliminada.Esta opción asegura que todas las funciones se ejecuten en modo estricto. Una directiva de modo estricto debe estar presente en el código global o en cada declaración o expresión de función de nivel superior. No se preocupa de directivas de modo estricto innecesarias en funciones anidadas que ya son estrictas, ni de múltiples directivas de modo estricto en el mismo nivel.
Ejemplos de código incorrecto para esta regla con la opción anterior por defecto que ha sido eliminada:
// "strict": "error"function foo() {}
// "strict": "error"(function() { function bar() { "use strict"; }}());
Ejemplos de código correcto para esta regla con la opción anterior por defecto que ha sido eliminada:
// "strict": "error""use strict";function foo() {}
// "strict": "error"function foo() { "use strict";}
// "strict": "error"(function() { "use strict"; function bar() { "use strict"; }}());
Cuándo no usarlo
-