版本

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

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 v0.8.0 中引入。

延伸閱讀

資源

變更語言