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/wrap-iife: ["error", "outside"]*/
var x = function () { return { y: 1 };}(); // unwrapped
var x = (function () { return { y: 1 };})(); // wrapped function expression
不正
デフォルトの "outside"
オプションに対する **正しい** コードの例
js
/*eslint @stylistic/wrap-iife: ["error", "outside"]*/
var x = (function () { return { y: 1 };}()); // wrapped call expression
正しい
inside
"inside"
オプションに対する **不正な** コードの例
js
/*eslint @stylistic/wrap-iife: ["error", "inside"]*/
var x = function () { return { y: 1 };}(); // unwrapped
var x = (function () { return { y: 1 };}()); // wrapped call expression
不正
"inside"
オプションに対する **正しい** コードの例
js
/*eslint @stylistic/wrap-iife: ["error", "inside"]*/
var x = (function () { return { y: 1 };})(); // wrapped function expression
正しい
any
"any"
オプションに対する **不正な** コードの例
js
/*eslint @stylistic/wrap-iife: ["error", "any"]*/
var x = function () { return { y: 1 };}(); // unwrapped
不正
"any"
オプションに対する **正しい** コードの例
js
/*eslint @stylistic/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/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/wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */
var x = (function(){ foo(); })()
var x = (function(){ foo(); }).call(bar)
正しい