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 = ;
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 中引入。