The --fix
option on the command line can automatically fix some of the problems reported by this rule.
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.
// function expression could be unwrapped var x = function () { return { y: 1 };}(); // function declaration must be wrapped function () { /* side effects */ }(); // SyntaxError
This rule requires all immediately-invoked function expressions to be wrapped in parentheses.
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
.Examples of incorrect code for the default "outside"
option:
/*eslint wrap-iife: ["error", "outside"]*/ var x = function () { return { y: 1 };}(); // unwrapped var x = (function () { return { y: 1 };})(); // wrapped function expression
Examples of correct code for the default "outside"
option:
/*eslint wrap-iife: ["error", "outside"]*/ var x = (function () { return { y: 1 };}()); // wrapped call expression
Examples of incorrect code for the "inside"
option:
/*eslint wrap-iife: ["error", "inside"]*/ var x = function () { return { y: 1 };}(); // unwrapped var x = (function () { return { y: 1 };}()); // wrapped call expression
Examples of correct code for the "inside"
option:
/*eslint wrap-iife: ["error", "inside"]*/ var x = (function () { return { y: 1 };})(); // wrapped function expression
Examples of incorrect code for the "any"
option:
/*eslint wrap-iife: ["error", "any"]*/ var x = function () { return { y: 1 };}(); // unwrapped
Examples of correct code for the "any"
option:
/*eslint wrap-iife: ["error", "any"]*/ var x = (function () { return { y: 1 };}()); // wrapped call expression var x = (function () { return { y: 1 };})(); // wrapped function expression
Examples of incorrect code for this rule with the "inside", { "functionPrototypeMethods": true }
options:
/* eslint 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))
Examples of correct code for this rule with the "inside", { "functionPrototypeMethods": true }
options:
/* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */ var x = (function(){ foo(); })() var x = (function(){ foo(); }).call(bar)
This rule was introduced in ESLint 0.0.9.
© JS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/rules/wrap-iife