The --fix
option on the command line can automatically fix some of the problems reported by this rule.
A strict mode directive is a "use strict"
literal at the beginning of a script or function body. Ela permite uma semântica de modo estrito.
Quando uma directiva ocorre em âmbito global, o modo estrito aplica-se a todo o script:
"use strict";// strict modefunction foo() { // strict mode}
Quando uma directiva ocorre no início de um corpo de função, o modo estrito aplica-se apenas a essa função, incluindo todas as funções contidas:
function foo() { "use strict"; // strict mode}function foo2() { // not strict mode};(function() { "use strict"; function bar() { // strict mode }}());
No sistema de módulos CommonJS, uma função oculta envolve cada módulo e limita o âmbito de uma directiva de modo estrito “global”.
Em módulos ECMAScript, que têm sempre semântica de modo estrito, as directivas são desnecessárias.
Detalhes da regra
Esta regra exige ou não directivas de modo estrito.
Esta regra não permite directivas de modo estrito, independentemente da opção especificada, se a configuração ESLint especificar uma das seguintes como opções de analisador:
-
"sourceType": "module"
isto é, os ficheiros são módulos ECMAScript -
"impliedStrict": true
propriedade noecmaFeatures
objecto
Esta regra desabilita as directivas de modo estrito, independentemente da opção especificada, em funções com listas de parâmetros não simples (por exemplo, listas de parâmetros com valores de parâmetros por defeito) porque isso é um erro de sintaxe no ECMAScript 2016 e mais tarde. Ver os exemplos da opção de função.
O --fix
opção na linha de comando não insere novas "use strict"
declarações, mas apenas remove declarações desnecessárias.
Opções
Esta regra tem uma opção de string:
-
"safe"
(por defeito) corresponde a uma das seguintes opções:-
"global"
se ESLint considerar um ficheiro como sendo um módulo CommonJS -
"function"
caso contrário
-
-
"global"
requer uma directiva de modo estrito no âmbito global (e não permite quaisquer outras directivas de modo estrito) -
"function"
requer uma directiva de modo estrito em cada top-declaração ou expressão da função de nível (e não permite quaisquer outras directivas de modo estrito) -
"never"
não permite directivas de modo estrito
safe
O "safe"
opção corresponde à opção "global"
se a ESLint considerar um ficheiro como sendo um Nó.js ou módulo CommonJS porque a configuração especifica uma das seguintes opções:
-
node
oucommonjs
ambientes -
"globalReturn": true
propriedade no móduloecmaFeatures
objecto da opção parser
Outra, a opção "safe"
corresponde à opção "function"
. Note que se "globalReturn": false
for explicitamente especificada na configuração, a opção "safe"
corresponderá à opção "function"
, independentemente do ambiente especificado.
global
Exemplos de código incorrecto para esta regra com a opção "global"
:
/*eslint strict: */function foo() {}
/*eslint strict: */function foo() { "use strict";}
/*eslint strict: */"use strict";function foo() { "use strict";}
Exemplos de código correcto para esta regra com a opção "global"
:
/*eslint strict: */"use strict";function foo() {}
função
Esta opção assegura que todos os corpos funcionais são códigos de modo estrito, enquanto que o código global não o é. Particularmente se um passo de construção concatenar múltiplos scripts, uma directiva de modo estrito em código global de um script poderia involuntariamente permitir o modo estrito noutro script que não se pretendia que fosse código estrito.
Exemplos de código incorrecto para esta regra com a opção "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) {}
Exemplos de código correcto para esta regra com a opção "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
Exemplos de código incorrecto para esta regra com a opção "never"
:
/*eslint strict: */"use strict";function foo() {}
/*eslint strict: */function foo() { "use strict";}
Exemplos de código correcto para esta regra com a opção "never"
:
/*eslint strict: */function foo() {}
Padrão anterior (removido)
A opção padrão (ou seja, sem opção de string especificada) para esta regra foi removida em ESLint v1.0. A opção "function"
é mais semelhante à opção removida.
Esta opção assegura que todas as funções são executadas em modo estrito. Uma directiva de modo estrito deve estar presente em código global ou em todas as declarações ou expressões de funções de nível superior. Não se preocupa com directivas de modo estrito desnecessárias em funções aninhadas que já são estritas, nem com múltiplas directivas de modo estrito ao mesmo nível.
Exemplos de código incorrecto para esta regra com a opção por defeito anterior que foi removida:
// "strict": "error"function foo() {}
// "strict": "error"(function() { function bar() { "use strict"; }}());
Exemplos de código correcto para esta regra com a opção por defeito anterior que foi removida:
// "strict": "error""use strict";function foo() {}
// "strict": "error"function foo() { "use strict";}
// "strict": "error"(function() { "use strict"; function bar() { "use strict"; }}());