단북
프론트엔드 기술 면접·자바스크립트 핵심 개념

일반 함수와 화살표 함수의 가장 큰 차이점은 무엇인가요?

this 바인딩, arguments, 생성자 사용 가능 여부 등 일반 함수와 화살표 함수의 핵심 차이를 정리합니다.

화살표 함수(=>)는 단순히 짧게 쓰는 문법이 아니라, 일반 함수와 동작 자체가 다른 부분이 있습니다. 가장 큰 차이는 this를 다루는 방식입니다.

가장 큰 차이: this 바인딩

일반 함수의 this호출 방식에 따라 동적으로 정해집니다. 반면 화살표 함수는 자신만의 this가 없고, 정의된 위치의 바깥 this 를 그대로 씁니다(렉시컬 this). 이 차이 때문에 콜백에서 바깥 this를 유지할 때 화살표 함수가 유용합니다.

const obj = {
  name: '단북',
  // 일반 함수: 콜백 안 this가 obj가 아니게 됨
  wrong() {
    setTimeout(function () {
      console.log(this.name); // undefined (this가 obj 아님)
    }, 0);
  },
  // 화살표 함수: 바깥(wrong)의 this를 유지
  right() {
    setTimeout(() => {
      console.log(this.name); // '단북'
    }, 0);
  },
};

그 외 차이

항목일반 함수화살표 함수
this호출 방식에 따라 동적바깥 스코프의 this (렉시컬)
arguments 객체있음없음 (rest 파라미터 ...args 사용)
new 생성자가능불가능 (TypeError)
prototype 프로퍼티있음없음
호이스팅함수 선언문은 전체 호이스팅변수 규칙(표현식)을 따름
const arrow = () => {};
new arrow(); // TypeError: arrow is not a constructor
 
function normal() {
  console.log(arguments); // 인자 목록 객체
}
const arrowArgs = (...args) => console.log(args); // arguments 대신 rest

언제 무엇을 쓰나

  • 화살표 함수 — 콜백, 배열 메서드(map/filter), 바깥 this를 유지해야 할 때.
  • 일반 함수 — 객체의 메서드(자신의 this가 필요할 때), 생성자, arguments가 필요할 때.

특히 객체 메서드를 화살표 함수로 정의하면 this가 객체가 아니라 바깥(보통 전역)을 가리키므로 주의해야 합니다.

화살표 함수에 대한 설명으로 옳지 않은 것은?

이 레슨을 다 읽으셨나요?

완료 표시는 이 브라우저에 저장됩니다.