JavaScript の bind とは

bind は関数オブジェクトに備わっているメソッドで、新しい関数を返す。返された関数は、元の関数に特定の this 値や引数を固定して呼び出すことができる。

this を固定する
関数に部分適用(引数の事前設定)ができる
新しい関数を返すため、元の関数は変化しない
コンストラクタとして使った場合は、bind の this 固定は無視される
function greet(greeting, name) {
  return greeting + ', ' + name;
}

const sayHelloTo = greet.bind(null, 'Hello');
console.log(sayHelloTo('Alice')); // "Hello, Alice"

const obj = {
  x: 42,
  getX: function() {
    return this.x;
  }
};

const unboundGetX = obj.getX;
console.log(unboundGetX()); // undefined

const boundGetX = obj.getX.bind(obj);
console.log(boundGetX()); // 42

bind はコールバックやイベントハンドラで this が失われる場面で有効に機能する。また、カリー化や部分適用のように関数の使い回しを便利にする役割も持っている。