Spec-Zone.ru › ESLint

no-new-func

Запретить операторы new с объектом Function

В JavaScript можно создавать функции из строк во время выполнения с помощью конструктора Function, например:

const a = new Function("a", "b", "return a + b");
const b = Function("a", "b", "return a + b");
const c = Function.call(null, "a", "b", "return a + b");
const d = Function.apply(null, ["a", "b", "return a + b"]);
const x = Function.bind(null, "a", "b", "return a + b")();

Многие считают это плохой практикой из-за сложности отладки и чтения таких функций. Кроме того, директивы Content-Security-Policy (CSP) могут запрещать использование eval() и аналогичных методов для создания кода из строк.

Подробности правила

Это сообщение об ошибке указывает на использование плохой практики. Передавая строку конструктору Function, вы заставляете движок анализировать эту строку примерно так же, как при вызове функции eval.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-new-func: "error"*/

const a = new Function("a", "b", "return a + b");
const b = Function("a", "b", "return a + b");
const c = Function.call(null, "a", "b", "return a + b");
const d = Function.apply(null, ["a", "b", "return a + b"]);
const x = Function.bind(null, "a", "b", "return a + b")();
const y = Function.bind(null, "a", "b", "return a + b"); // assuming that the result of Function.bind(...) will be eventually called.

Примеры правильного кода для этого правила:

Открыть в Playground
/*eslint no-new-func: "error"*/

const x = function (a, b) {
    return a + b;
};

Параметры

У этого правила нет параметров.

Когда не следует использовать это правило

В более сложных случаях, когда действительно необходимо использовать конструктор Function.

Версия

Это правило добавлено в ESLint v0.0.7.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-new-func

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API