строгий
Требовать или запрещать директивы строгого режима
Некоторые проблемы, выявленные этим правилом, автоматически исправляются с помощью параметра командной строки --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, так как конфигурация указывает одно из следующих свойств:
-
"globalReturn": trueсвойство в объектеecmaFeaturesпараметров разбора
В противном случае параметр "safe" соответствует параметру "function". Обратите внимание, что если "globalReturn": false явно указан в конфигурации, параметр "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) {
}
}());
var foo = (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. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode#Differences_from_non-strict_to_strict.
Версия
Это правило было добавлено в ESLint v0.1.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/strict