版本

wrap-iife

要求在立即function调用周围使用括号

🔧 可修复

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

此规则在 ESLint v8.53.0 中已弃用。请使用 相应的规则@stylistic/eslint-plugin-js 中。

您可以立即调用函数表达式,但不能调用函数声明。创建立即调用函数表达式 (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"选项,不正确代码的示例

在代码沙箱中打开
/*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"选项,不正确代码的示例

在代码沙箱中打开
/*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"选项,不正确代码的示例

在代码沙箱中打开
/*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)

版本

此规则在 ESLint v0.0.9 中引入。

资源

更改语言