오늘은 모던 JavaScript 튜토리얼에서 함수 바인딩에 대해 공부했다. 작성한 질문은 다음과 같다.
객체 메서드가 객체 내부가 아닌 다른 곳에 전달되어 호출되면 this가 사라지는 이유는 객체에서 분리된 함수만 전달되기 때문이다. 브라우저 환경에서 setTimeout 메서드는 인수로 전달받은 함수를 호출할 때, this에 window 객체를 할당하기 때문에 원하는 this를 참조하기 어렵다.
메서드를 전달하며 컨텍스트도 제대로 유지하려면 래퍼 함수를 사용하는 방법과 bind를 사용하여 컨텍스트를 유지하는 방법이 있다.
부분 적용 함수를 만드는 이유는 좋은 가독성을 가진 이름의 함수를 만들 수 있기 때문이다. 예를 들어, 채팅 서비스를 만든다고 가정하며 메시지를 전달하는 함수 send를 만든다고 가정할 때, 사용자가 제삼자에게 메시지를 전달하는 함수 sendTo와 제삼자가 사용자에게 메시지를 전달하는 함수 sendFrom을 부분 적용을 통해 만들 수 있기 때문이다.
강의를 듣거나 구글링을 통해 얻은 다른 분의 코드를 참고할 때, 함수 바인딩이라는 사실을 모른 채 사용한 경험이 있을 것 같다고 생각될 정도로 유용한 것 같다. 객체 메서드를 다른 메서드의 인수로 전달할 때, this가 사라진다는 사실을 꼭 잊지 말아야겠다.
'TIL' 카테고리의 다른 글
TIL - 20220720 (0) | 2022.07.20 |
---|---|
TIL - 20220719 (0) | 2022.07.19 |
TIL - 20220717 (0) | 2022.07.17 |
TIL - 20220716 (0) | 2022.07.16 |
TIL - 20220715 (0) | 2022.07.15 |