版本

wrap-iife

要求立即呼叫 function 時加上括號

🔧 可修正

此規則回報的某些問題可以使用 --fix 命令列選項自動修正

此規則已在 ESLint v8.53.0 中被棄用。請使用 @stylistic/eslint-plugin-js 中的 對應規則

您可以立即呼叫函式表示式,但不能立即呼叫函式宣告。建立立即呼叫函式表示式 (IIFE) 的常見技巧是將函式宣告包裹在括號中。開頭的括號會使包含的函式被解析為表示式,而不是宣告。

// function expression could be unwrapped
var x = function () { return { y: 1 };}();

// function declaration must be wrapped
function () { /* side effects */ }(); // SyntaxError

規則詳細資訊

此規則要求所有立即呼叫函式表示式都必須包裹在括號中。

選項

此規則有兩個選項,一個字串選項和一個物件選項。

字串選項

  • "outside" 強制永遠包裹呼叫表示式。預設值為 "outside"
  • "inside" 強制永遠包裹函式表示式。
  • "any" 強制永遠包裹,但允許任一風格。

物件選項

  • "functionPrototypeMethods": true 額外強制使用 .call.apply 呼叫的函式表示式也要包裹。預設值為 false

外側

預設 "outside" 選項的錯誤程式碼範例

在遊樂場開啟
/*eslint wrap-iife: ["error", "outside"]*/

var x = function () { return { y: 1 };}(); // unwrapped
var x = (function () { return { y: 1 };})(); // wrapped function expression

預設 "outside" 選項的正確程式碼範例

在遊樂場開啟
/*eslint wrap-iife: ["error", "outside"]*/

var x = (function () { return { y: 1 };}()); // wrapped call expression

內側

"inside" 選項的錯誤程式碼範例

在遊樂場開啟
/*eslint wrap-iife: ["error", "inside"]*/

var x = function () { return { y: 1 };}(); // unwrapped
var x = (function () { return { y: 1 };}()); // wrapped call expression

"inside" 選項的正確程式碼範例

在遊樂場開啟
/*eslint wrap-iife: ["error", "inside"]*/

var x = (function () { return { y: 1 };})(); // wrapped function expression

任何

"any" 選項的錯誤程式碼範例

在遊樂場開啟
/*eslint wrap-iife: ["error", "any"]*/

var x = function () { return { y: 1 };}(); // unwrapped

"any" 選項的正確程式碼範例

在遊樂場開啟
/*eslint wrap-iife: ["error", "any"]*/

var x = (function () { return { y: 1 };}()); // wrapped call expression
var x = (function () { return { y: 1 };})(); // wrapped function expression

functionPrototypeMethods

此規則搭配 "inside", { "functionPrototypeMethods": true } 選項的錯誤程式碼範例

在遊樂場開啟
/* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */

var x = function(){ foo(); }()
var x = (function(){ foo(); }())
var x = function(){ foo(); }.call(bar)
var x = (function(){ foo(); }.call(bar))

此規則搭配 "inside", { "functionPrototypeMethods": true } 選項的正確程式碼範例

在遊樂場開啟
/* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */

var x = (function(){ foo(); })()
var x = (function(){ foo(); }).call(bar)

版本

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

資源

變更語言