wrap-iife
関数式はすぐに呼び出すことができますが、関数宣言はできません。即時実行関数式(IIFE)を作成する一般的な手法は、関数宣言を括弧で囲むことです。開始括弧によって、含まれる関数は宣言ではなく式として解析されます。
js
// function expression could be unwrapped
var x = function () { return { y: 1 };}();
// function declaration must be wrapped
function () { /* side effects */ }(); // SyntaxError
ルールの詳細
このルールでは、すべての即時実行関数式を括弧で囲む必要があります。
オプション
このルールには、文字列オプションとオブジェクトオプションの2つのオプションがあります。
文字列オプション
"outside"
は、常に *呼び出し* 式をラップすることを強制します。デフォルトは"outside"
です。"inside"
は、常に *関数* 式をラップすることを強制します。"any"
は、常にラップすることを強制しますが、どちらのスタイルも許可します。
オブジェクトオプション
"functionPrototypeMethods": true
は、.call
および.apply
を使用して呼び出された関数式をラップすることも強制します。デフォルトはfalse
です。
outside
デフォルトの "outside"
オプションに関する不正なコードの例
js
/*eslint @stylistic/js/wrap-iife: ["error", "outside"]*/
var x = function () { return { y: 1 };}(); // unwrapped
var x = (function () { return { y: 1 };})(); // wrapped function expression
不正
デフォルトの "outside"
オプションに関する正しいコードの例
js
/*eslint @stylistic/js/wrap-iife: ["error", "outside"]*/
var x = (function () { return { y: 1 };}()); // wrapped call expression
正しい
inside
"inside"
オプションに関する不正なコードの例
js
/*eslint @stylistic/js/wrap-iife: ["error", "inside"]*/
var x = function () { return { y: 1 };}(); // unwrapped
var x = (function () { return { y: 1 };}()); // wrapped call expression
不正
"inside"
オプションに関する正しいコードの例
js
/*eslint @stylistic/js/wrap-iife: ["error", "inside"]*/
var x = (function () { return { y: 1 };})(); // wrapped function expression
正しい
any
"any"
オプションに関する不正なコードの例
js
/*eslint @stylistic/js/wrap-iife: ["error", "any"]*/
var x = function () { return { y: 1 };}(); // unwrapped
不正
"any"
オプションに関する正しいコードの例
js
/*eslint @stylistic/js/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 }
オプションを使用したこのルールに関する不正なコードの例
js
/* eslint @stylistic/js/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 }
オプションを使用したこのルールに関する正しいコードの例
js
/* eslint @stylistic/js/wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */
var x = (function(){ foo(); })()
var x = (function(){ foo(); }).call(bar)
正しい