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.
Примеры неправильного кода для этого правила:
/*eslint no-new-func: "error"*/
var x = ;
var x = ;
var x = ;
var x = ;
var x = ();
var f = ; // assuming that the result of Function.bind(...) will be eventually called.
Примеры правильного кода для этого правила:
/*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