lexical this

화살표 함수와 this 판단

화살표 함수는 자신만의 this를 만들지 않고 바깥 this를 사용하므로 메서드, 콜백, 클래스 필드에서 의미가 달라집니다.

일반 함수

호출 방식에 따라 변경

객체 메서드, 단독 호출, bind 호출에 따라 this 값이 달라질 수 있습니다.

function run()
화살표 함수

외부 this 캡처

콜백으로 전달해도 바깥 스코프의 this를 유지하는 특징이 있습니다.

() => this.name
this 타입

명시적 문맥 선언

일반 함수의 첫 매개변수 자리에 this 타입을 적어 잘못된 호출을 막습니다.

function f(this: User)
클래스 필드

콜백 전달에 유리

이벤트 핸들러처럼 메서드를 넘길 때 this 손실을 줄일 수 있습니다.

handle = () => {}
메서드 선택 prototype 메서드가 필요한지, 콜백 안정성이 중요한지 먼저 봅니다.
타입 명시 this를 쓰는 일반 함수는 this 매개변수 타입을 고려합니다.
혼동 방지 화살표 함수에는 별도 this 매개변수 타입을 선언할 수 없습니다.

this 문제는 문법 취향이 아니라 함수가 어디서 호출될지와 어떤 this를 기대하는지의 문제입니다.