# no-extra-bind
禁止对 .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() 的使用。
**注意:**箭头函数永远不能使用 bind() 设置它们的 this 值。此规则将所有使用箭头函数的 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() 的不必要调用,您可以安全地禁用此规则。