# wrap-iife

立即调用 function 需要括号

一些该规则报告的问题可以通过 --fix 命令行选项 自动修复

您可以立即调用函数表达式,但不能调用函数声明。创建立即调用函数表达式 (IIFE) 的常用技术是将函数声明包装在括号中。左括号导致包含的函数被解析为表达式,而不是声明。

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

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

# 规则详情

此规则要求所有立即调用的函数表达式都用括号括起来。

# 选项

该规则有两个选项,一个字符串选项和一个对象选项。

字符串选项:

  • "outside" 强制始终包装调用表达式。默认值为 "outside"
  • "inside" 强制始终包装函数表达式。
  • "any" 强制总是换行,但允许任何一种样式。

对象选项:

  • "functionPrototypeMethods": true 还强制使用 .call.apply 调用包装函数表达式。默认值为 false

# outside

默认 "outside" 选项的错误代码示例:

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

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

默认 "outside" 选项的正确代码示例:

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

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

# inside

"inside" 选项的错误代码示例:

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

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

"inside" 选项的正确代码示例:

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

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

# any

"any" 选项的错误代码示例:

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

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

"any" 选项的正确代码示例:

/*eslint 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 } 选项的错误代码示例:

/* 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))

此规则使用 "inside", { "functionPrototypeMethods": true } 选项的正确代码示例:

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

var x = (function(){ foo(); })()
var x = (function(){ foo(); }).call(bar)
Last Updated: 5/13/2023, 8:55:38 PM