版本

no-new-func

不允許對 Function 物件使用 new 運算符

可以在 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")();

由於這些類型的函式難以偵錯和閱讀,許多人認為這是不良做法。此外,內容安全策略 (CSP) 指令可能會禁止使用 eval() 和類似方法從字串建立程式碼。

規則詳情

此錯誤的提出是為了突顯不良做法的使用。透過將字串傳遞給 Function 建構函式,您需要引擎以類似於呼叫 eval 函式的方式剖析該字串。

此規則的錯誤程式碼範例

在遊樂場開啟
/*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.

此規則的正確程式碼範例

在遊樂場開啟
/*eslint no-new-func: "error"*/

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

何時不使用它

在您真正需要使用 Function 建構函式的更進階情況下。

版本

此規則在 ESLint v0.0.7 中引入。

資源

變更語言