版本

prefer-arrow-callback

要求为回调使用箭头函数

🔧 可修复

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

❄️ 冻结

此规则目前处于冻结状态,不接受功能请求。

对于回调或函数参数,箭头函数可以是函数表达式的有吸引力的替代方案。

例如,箭头函数自动绑定到其周围的作用域/上下文。这为预 ES6 标准显式绑定函数表达式以实现类似行为提供了一种替代方案。

此外,箭头函数是

  • 不太冗长,并且更容易理解。

  • 以词法方式绑定,无论何时或何地调用它们。

规则详情

此规则查找用作回调或函数参数的函数表达式。对于任何可以被箭头函数替换而不会更改结果的表达式,都将产生错误。

以下示例被标记

在 Playground 中打开
/* eslint prefer-arrow-callback: "error" */

foo(function(a) { return a; }); // ERROR
// prefer: foo(a => a)

foo(function() { return this.a; }.bind(this)); // ERROR
// prefer: foo(() => this.a)

箭头函数不会产生相同结果的实例将被忽略。

以下示例将不会被标记

在 Playground 中打开
/* eslint prefer-arrow-callback: "error" */

// arrow function callback
foo(a => a); // OK

// generator as callback
foo(function*() { yield; }); // OK

// function expression not used as callback or function argument
const foo = function foo(a) { return a; }; // OK

// unbound function expression callback
foo(function() { return this.a; }); // OK

// recursive named function callback
foo(function bar(n) { return n && n + bar(n - 1); }); // OK

选项

通过选项对象访问对此规则行为的进一步控制。

默认值:{ allowNamedFunctions: false, allowUnboundThis: true }

allowNamedFunctions

默认情况下,{ "allowNamedFunctions": false },此 boolean 选项禁止使用命名函数作为回调或函数参数。

将此值更改为 true 将通过允许无限制地使用命名函数来反转此选项的行为。

{ "allowNamedFunctions": true } 将不会标记以下示例

在 Playground 中打开
/* eslint prefer-arrow-callback: [ "error", { "allowNamedFunctions": true } ] */

foo(function bar() {});

allowUnboundThis

默认情况下,{ "allowUnboundThis": true },此 boolean 选项允许包含 this 的函数表达式用作回调,只要相关函数尚未被显式绑定。

当设置为 false 时,此选项完全禁止使用函数表达式作为回调或函数参数,没有任何例外。

{ "allowUnboundThis": false } 标记以下示例

在 Playground 中打开
/* eslint prefer-arrow-callback: [ "error", { "allowUnboundThis": false } ] */

foo(function() { this.a; });

foo(function() { (() => this); });

someArray.map(function(item) { return this.doSomething(item); }, someObject);

何时不使用它

  • 在尚未采用 ES6 语言功能的环境中 (ES3/5)。

  • 在允许使用函数表达式来描述回调或函数参数的 ES6+ 环境中。

版本

此规则在 ESLint v1.2.0 中引入。

延伸阅读

资源

更改语言