질문 5 · 실전 면접 답변
this는 어떻게 정해지며 call·apply·bind는 무엇이 다른가요?
이렇게 답해 보세요 (핵심 답변)
일반 함수의 this는 함수가 정의된 위치가 아니라 어떻게 호출되었는지에 따라 결정됩니다. 예를 들어 obj.method()처럼 호출하면 this가 obj를 가리키지만, 그 메서드를 변수에 담아 단독으로 호출하면 기존 객체와의 연결을 잃게 됩니다. 이때 call과 apply는 원하는 this와 인자를 직접 지정해 함수를 즉시 실행하는 메서드이고, bind는 지정한 this와 일부 인자를 고정한 새로운 함수를 만들어 반환합니다. 반면 화살표 함수는 자신만의 this를 바인딩하지 않고 바깥 스코프의 this를 그대로 사용합니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 객체의 메서드를 이벤트 리스너나 콜백으로 그대로 전달하면 호출 시점에 원래 객체와의 this 연결이 끊어지기 쉽습니다.
- 엄격 모드(strict mode)에서 일반 함수를 객체 없이 단독으로 호출하면 this는 전역 객체가 아니라 undefined가 됩니다.
면접에서 자주 하는 실수
화살표 함수는 자체적인 this 바인딩이 없기 때문에 call, apply, bind를 사용해도 this를 바꿀 수 없습니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 5번을 바탕으로 질문과 답변을 새로 정리했습니다.