Spec-Zone.ru › ESLint

no-new-func

Запретить использование операторов new с объектом Function

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

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

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

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

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

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

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

var x = new Function("a", "b", "return a + b");
var x = Function("a", "b", "return a + b");
var x = Function.call(null, "a", "b", "return a + b");
var x = Function.apply(null, ["a", "b", "return a + b"]);
var x = Function.bind(null, "a", "b", "return a + b")();
var f = 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"*/

var 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