개발자

화살표 함수에서는 왜 this가 자신이 속한 객체를 가르치지 않나요?

2023년 01월 16일조회 154

자바스크립트에서 객체 안에 함수를 넣으려고 하는데 화살표 함수에서는 function에서의 함수와 다르게 this가 자신이 속한 객체를 가리키지 않는다고 하더라고요. 왜 같은 함수인데 this의 의미가 다른 건가요? 선배 개발자 분들의 답변 미리 감사합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

윤석현님의 프로필 사진

화살표 함수에서 this 바인딩은 상위 스코프의 this를 그대로 참조합니다. 객체 리터럴 형태로 객체를 생성할 때의 블록은 블록 스코프가 아니므로 실행 컨텍스트와 렉시컬 컨텍스트가 생기지 않습니다. 그러므로 객체의 프로퍼티 메서드로 화살표 함수를 선언하면, 그 상위 스코프는 전역이므로 this는 전역객체 window와 바인딩 됩니다. 반면 클래스의 프로토타입 메서드에 콜백 형태로 화살표 함수를 전달하면 그때의 this는 클래스가 생성할 인스턴스와 바인딩 됩니다. 클래스는 블록 스코프이므로 실행 컨텍스트와 렉시컬 컨텍스트 생성합니다. 위의 화살표 함수가 실행되는 시점에서 화살표 함수 자신은 this 바인딩을 갖지 않으므로 그 상위 this 바인딩인 클래스의 this, 즉 클래스가 생성할 인스턴스와 바인딩 됩니다. 이처럼 화살표 함수는 이벤트 콜백 메서드로 사용할 수 있습니다. 이벤트 콜백 메서드로 일반 함수를 전달한다면 그 콜백 메서드가 실행되는 시점에서 this는 window가 됩니다. 모든 일반 함수의 this는 전역 객체기 때문입니다. 그렇게 되면 콜백 함수에서 클래스의 프로퍼티에 접근할 때 클래스의 네임스페이스가 아닌 전역 네임스페이스에서 프로퍼티를 찾아 undefined를 만날 수 있습니다. 한편, 자바스크립트에서 함수는 화살표 함수, 일반 함수, 메서드가 있는데 각각의 this 바인딩은 다음과 같습니다. 일반 함수: 전역 객체, 화살표 함수: 화살표 함수가 아닌 상위 스코프의 this 바인딩, 메서드(ES6에서 메서드는 메서드 축약 형태로 정의된 함수): 해당 객체, 클래스 안이라면 생성자를 통해 생성할 인스턴스

kevin님의 프로필 사진

화살 함수가 없던시절 (라떼는...) .bind() 라는 친구를 사용했엇는데요 이부분에대해서 조금 찾아보시면 이해에 많은 도움이 되지않을까 생각이 듭니다

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!