Skip to content

@stylistic/

wrap-iife

You can immediately invoke function expressions, but not function declarations. A common technique to create an immediately-invoked function expression (IIFE) is to wrap a function declaration in parentheses. The opening parentheses causes the contained function to be parsed as an expression, rather than a declaration.

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

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

Rule Details

This rule requires all immediately-invoked function expressions to be wrapped in parentheses.

Options

This rule has two options, a string option and an object option.

String option:

  • "outside" enforces always wrapping the call expression. The default is "outside".
  • "inside" enforces always wrapping the function expression.
  • "any" enforces always wrapping, but allows either style.

Object option:

  • "functionPrototypeMethods": true additionally enforces wrapping function expressions invoked using .call and .apply. The default is false.

outside

Examples of incorrect code for the default "outside" option:

js
/*eslint @stylistic/wrap-iife: ["error", "outside"]*/

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

Examples of correct code for the default "outside" option:

js
/*eslint @stylistic/wrap-iife: ["error", "outside"]*/

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

inside

Examples of incorrect code for the "inside" option:

js
/*eslint @stylistic/wrap-iife: ["error", "inside"]*/

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

Examples of correct code for the "inside" option:

js
/*eslint @stylistic/wrap-iife: ["error", "inside"]*/

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

any

Examples of incorrect code for the "any" option:

js
/*eslint @stylistic/wrap-iife: ["error", "any"]*/

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

Examples of correct code for the "any" option:

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
correct

functionPrototypeMethods

Examples of incorrect code for this rule with the "inside", { "functionPrototypeMethods": true } options:

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)
)
incorrect

Examples of correct code for this rule with the "inside", { "functionPrototypeMethods": true } options:

js
/* eslint @stylistic/wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */

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

Released under the MIT License.