コンテンツへスキップ

@stylistic/

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)
正しい

MITライセンスの下でリリースされています。