strict
Требовать или запрещать директивы строгого режима
Некоторые проблемы, о которых сообщает это правило, можно автоматически исправить с помощью параметра командной строки --fix
Директива строгого режима — это литерал "use strict" в начале скрипта или тела функции. Она включает семантику строгого режима.
Если директива находится в глобальной области видимости, строгий режим применяется ко всему скрипту:
"use strict";
// strict mode
function foo() {
// strict mode
}
Если директива находится в начале тела функции, строгий режим применяется только к этой функции, включая все вложенные в неё функции:
function foo() {
"use strict";
// strict mode
}
function foo2() {
// not strict mode
};
(function() {
"use strict";
function bar() {
// strict mode
}
}());
В модульной системе CommonJS каждый модуль оборачивается скрытой функцией, которая ограничивает область действия директивы строгого режима, объявленной на «глобальном» уровне.
В модулях ECMAScript, где всегда действует семантика строгого режима, директивы не нужны.
Подробности правила
Это правило требует или запрещает директивы строгого режима.
Это правило запрещает директивы строгого режима независимо от указанного параметра, если в конфигурации ESLint в качестве параметров парсера задано любое из следующего:
-
"sourceType": "module", то есть файлы являются модулями ECMAScript. -
"impliedStrict": trueв объектеecmaFeatures.
Это правило запрещает директивы строгого режима независимо от указанного параметра в функциях со списками параметров, не являющимися простыми (например, со значениями параметров по умолчанию), поскольку в ECMAScript 2016 и более поздних версиях это синтаксическая ошибка. См. примеры для параметра function.
Это правило не применяется к статическим блокам классов независимо от указанного параметра, поскольку в статических блоках классов не может быть директив. Поэтому инструкция "use strict" в статическом блоке класса не является директивой, и о ней сообщит правило no-unused-expressions.
Параметр --fix командной строки не добавляет новые инструкции "use strict", а только удаляет ненужные.
Параметры
Это правило принимает строковый параметр:
-
"safe"(по умолчанию) соответствует одному из следующих параметров:-
"global", если ESLint считает файл модулем CommonJS -
"function"в противном случае
-
-
"global"требует одну директиву строгого режима в глобальной области видимости (и запрещает любые другие директивы строгого режима) -
"function"требует одну директиву строгого режима в каждом объявлении или выражении функции верхнего уровня (и запрещает любые другие директивы строгого режима) -
"never"запрещает директивы строгого режима
safe
Параметр "safe" соответствует параметру "global", если ESLint считает файл модулем Node.js или CommonJS, поскольку в конфигурации указано любое из следующего:
-
"sourceType": "commonjs"в параметрах языка -
"globalReturn": trueв объектеecmaFeaturesпараметров парсера
В противном случае параметр "safe" соответствует параметру "function".
global
Примеры неправильного кода для этого правила с параметром "global":
/*eslint strict: ["error", "global"]*/
/*eslint strict: ["error", "global"]*/
/*eslint strict: ["error", "global"]*/
"use strict";
function foo() {
}
Примеры правильного кода для этого правила с параметром "global":
/*eslint strict: ["error", "global"]*/
"use strict";
function foo() {
}
function
Этот параметр обеспечивает выполнение всех тел функций в строгом режиме, тогда как глобальный код выполняется не в строгом режиме. В частности, если на этапе сборки несколько скриптов объединяются, директива строгого режима в глобальном коде одного скрипта может непреднамеренно включить строгий режим в другом скрипте, который не должен был выполняться в строгом режиме.
Примеры неправильного кода для этого правила с параметром "function":
/*eslint strict: ["error", "function"]*/
/*eslint strict: ["error", "function"]*/
(());
/*eslint strict: ["error", "function"]*/
// Illegal "use strict" directive in function with non-simple parameter list.
// This is a syntax error since ES2016.
function foo(a = 1) {
}
// We cannot write "use strict" directive in this function.
// So we have to wrap this function with a function with "use strict" directive.
Примеры правильного кода для этого правила с параметром "function":
/*eslint strict: ["error", "function"]*/
function foo() {
"use strict";
}
(function() {
"use strict";
function bar() {
}
function baz(a = 1) {
}
}());
const foo2 = (function() {
"use strict";
return function foo(a = 1) {
};
}());
never
Примеры неправильного кода для этого правила с параметром "never":
/*eslint strict: ["error", "never"]*/
function foo() {
}
/*eslint strict: ["error", "never"]*/
function foo() {
}
Примеры правильного кода для этого правила с параметром "never":
/*eslint strict: ["error", "never"]*/
function foo() {
}
прежний параметр по умолчанию (удалён)
(удалён) Параметр по умолчанию (то есть отсутствие указанного строкового параметра) для этого правила был удалён в ESLint v1.0. Параметр "function" наиболее близок к удалённому параметру.
Этот параметр обеспечивает выполнение всех функций в строгом режиме. Директива строгого режима должна присутствовать в глобальном коде или в каждом объявлении или выражении функции верхнего уровня. Он не учитывает ненужные директивы строгого режима во вложенных функциях, которые уже работают в строгом режиме, а также несколько директив строгого режима на одном уровне.
Примеры неправильного кода для этого правила с удалённым прежним параметром по умолчанию:
// "strict": "error"
function foo() {
}
// "strict": "error"
(function() {
function bar() {
"use strict";
}
}());
Примеры правильного кода для этого правила с удалённым прежним параметром по умолчанию:
// "strict": "error"
"use strict";
function foo() {
}
// "strict": "error"
function foo() {
"use strict";
}
// "strict": "error"
(function() {
"use strict";
function bar() {
"use strict";
}
}());
Когда не следует использовать это правило
В кодовой базе, содержащей код как в строгом, так и в нестрогом режиме, отключите это правило или избирательно отключайте его там, где это необходимо. Например, функции, обращающиеся к arguments.callee, недопустимы в строгом режиме. Полный список различий строгого режима доступен на MDN.
Версия
Это правило появилось в ESLint v0.1.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/strict