コンテンツへスキップ

@stylistic/js/

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

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