MDN에 나와있는 정의는 다음과 같다.
bind() 메소드가 호출되면 새로운 함수를 생성합니다. 받게되는 첫 인자의 value로는 this
키워드를 설정하고, 이어지는 인자들은 바인드된 함수의 인수에 제공됩니다.
정의만 보면 무슨 역할을 하는지 확실히 모르겠다. 코드를 보면서 이해해보자.
const myModule = {
x: 42,
getX() {
return this.x;
},
};
console.log(myModule.getX()); // 42
const unboundGetX = myModule.getX;
console.log(unboundGetX()); // undefined
const boundGetX = unboundGetX.bind(myModule);
console.log(boundGetX()); // 42
위 코드를 보면 myModule의 getX 메서드를 변수에 할당하고 실행하면 undefined가 출력되는 것을 볼 수 있다. 왜 그럴까?
자바스크립트의 this는 함수가 어떻게 호출되었는지에 따라 this에 바인딩할 객체가 동적으로 결정되기 때문이다.
이런 경우에 this를 자신이 지정한 객체에 바인딩 하도록 해주는 것이 bind() 메서드 이다.
function addArguments(arg1, arg2) {
return arg1 + arg2;
}
// bind의 2번 째 인자는 호출 할 함수의 인자를 고정시킨다.
const addFive = addArguments.bind(null, 5);
const result = addFive(10); // 15 === addArguments(5, 10)
// bind를 통해 첫 번째 인자를 고정했으므로, 두 번째 인자는 무시된다.
const result2 = addFive(10, 20); // 15 === addArguments(5, 10);
<aside> 💡 화살표 함수의 this는 렉시컬 환경의 this(함수가 정의 된 스코프의 this)를 바인딩 하므로, 화살표 함수에서는 bind() 메서드를 사용하더라도 바인딩 되지 않는다.
</aside>