no-extra-bind
禁止不必要的函数绑定( no-extra-bind )
在--fix
命令行上的选项可以自动修复一些被这条规则反映的问题。
bind()
方法用于创建具有特定this
值的函数,并可选地将参数绑定到特定值。当用于指定值时this
,函数实际this
在函数体中使用是很重要的。例如:
var boundGetName = (function getName() {
return this.name;
}).bind{ name: "ESLint" }
console.log(boundGetName() // "ESLint"
这段代码是一个很好的bind()
用于设置this
值的例子。
有时在代码维护过程中,该this
值将从函数体中删除。在这种情况下,您最终可以通过调用来bind()
完成任何事情:
// useless bind
var boundGetName = (function getName() {
return "ESLint";
}).bind{ name: "ESLint" }
console.log(boundGetName() // "ESLint"
在此代码中,引用this
已被删除,但bind()
仍被使用。在这种情况下,这bind()
是不必要的开销(并且性能受到影响),并且可以安全地删除。
规则细节
此规则旨在避免不必要的使用,bind()
因此只要立即调用的函数表达式( IIFE )正在使用bind()
并且没有适当的this
值,就会发出警告。此规则不会标记bind()
包含函数参数绑定的用法。
注意:
箭头功能不能this
使用它们的值设置bind()
。此规则将bind()
带箭头功能的所有用途标记为问题
此规则的错误
代码示例:
/*eslint no-extra-bind: "error"*/
/*eslint-env es6*/
var x = function () {
foo(
}.bind(bar
var x = (() => {
foo(
}).bind(bar
var x = (() => {
this.foo(
}).bind(bar
var x = function () {
(function () {
this.foo(
}()
}.bind(bar
var x = function () {
function foo() {
this.bar(
}
}.bind(baz
此规则的正确
代码示例:
/*eslint no-extra-bind: "error"*/
var x = function () {
this.foo(
}.bind(bar
var x = function (a) {
return a + 1;
}.bind(foo, bar
何时不使用它
如果您不担心不必要的呼叫bind()
,则可以安全地禁用此规则。
进一步阅读
版本
这条规则是在 ESLint 0.8.0 中引入的。