함수 문법과 this

화살표 함수: 짧은 문법이 아니라 this 캡처 규칙

화살표 함수는 자신만의 this, arguments, prototype을 만들지 않습니다. 그래서 콜백 안에서 바깥 this를 유지할 때 강하고, 객체 메서드나 생성자처럼 호출자가 this를 정해야 하는 자리에는 맞지 않습니다.

01

기본 문법

매개변수와 반환식이 짧아지지만, 핵심은 문법 축약보다 lexical this입니다.

표현식 반환
02

this 바인딩 확인

일반 함수의 this는 호출 방식에 따라 달라지고, 화살표 함수는 선언된 바깥 스코프의 this를 그대로 씁니다.

lexical this
03

콜백에서 활용

클래스 메서드 내부의 timer나 배열 메서드에서는 this 보존용 self 변수나 bind 호출을 줄입니다.

콜백 안정화
04

메서드에서 경계

객체 리터럴 메서드가 자기 객체를 this로 받아야 한다면 일반 메서드 축약 문법이 더 정확합니다.

호출자 this
배열 콜백
바깥 상태를 읽는 짧은 계산에 적합 items.map(item => item.id)처럼 this보다 데이터 흐름이 중요한 곳입니다.
권장
객체 메서드
호출 대상이 this가 되어야 하면 일반 함수 사용 user.say = () => this.name은 user가 아니라 바깥 this를 바라봅니다.
this 캡처 점검
DOM 이벤트
event.currentTarget을 쓰면 안정적이고 this 의존은 줄임 화살표 함수에서 this는 클릭된 요소가 아닐 수 있습니다.
이벤트

this가 필요한가 · 생성자 여부 · arguments 사용 점검

this가 필요한가 함수 안에서 this를 읽지 않는다면 화살표 함수 선택은 대부분 안전합니다.
생성자 여부 new로 호출해야 하는 함수는 화살표 함수가 될 수 없습니다.
arguments 사용 화살표 함수 안에서는 rest parameter로 필요한 값을 명시합니다.

메서드와 콜백 구분

const counter = {
  value: 0,
  tick() {
    setInterval(() => { this.value += 1; }, 1000);
  }
};