길잃은곰
길을 잃어 떠도는 곰
길잃은곰
전체 방문자
오늘
어제
  • 분류 전체보기 (87)
    • Algorithm (6)
    • HTML, CSS (9)
    • Frontend (1)
    • SW공학 (1)
    • WEB (4)
    • Javascript (29)
    • Typescript (0)
    • React (8)
    • Computer Science (11)
    • NEWS (0)
    • TIL(WIL) (4)
    • ETC (5)

블로그 메뉴

  • ✨깃허브
  • 홈
  • 태그
  • 방명록

인기 글

태그

  • EM
  • 코테
  • element
  • %
  • Es5
  • javascript2016
  • 코드트리
  • ES7
  • root-element
  • REM
  • ES6
  • js2016
  • 연탄
  • VW
  • 자바스크립트
  • VH
  • PX
  • ES8
  • Pixel
  • JavaScript
hELLO · Designed By 정상우.
길잃은곰

길을 잃어 떠도는 곰

Javascript

[ JavaScript ] Arrow Function ( 화살표 함수 )

2023. 1. 16. 19:38

화살표 함수 ( Arrow Function )

화살표 함수 표현(arrow function expression)은 전통적인 함수표현(function) 의 간편한 대안입니다. 하지만, 화살표 함수는 몇 가지 제한점이 있고 모든 상황에 사용할 수는 없습니다.

화살표 함수란 ES6 에서 처음 생긴 문법으로, 함수를 정의하는 방식 중 하나이다.

화살표를 선언해서 함수를 표현하는 방식이라 화살표 함수라는 이름이 붙여졌다.

// Function Expression
const add = function (a, b) {
  return a + b;
};
// Arrow Function
const add = (a, b) => a + b;

함수 표현식 보다 간단하게 함수를 나타낼 수 있습니다.

이렇게 간단하고 간결하게 표현되는데 어디서나 사용가능한 것은 아닙니다.

화살표 함수를 사용할 수 없는 경우

화살표 함수는 일반 함수와 다르게 익명성을 가지고 있기 때문에, 일부 함수에 대해 제한점이 생기게 됩니다.

어떤 상황에서 사용할 수 없는지 알아봅시다.

메소드를 정의할 때 ( This )

const obj = {
  name: "Lee",
  // 메소드를 정의할 때는 화살표 함수를 사용할 수 없습니다.
  sayHi: () => console.log(`Hi ${this.name}`),
};
obj.sayHi(); // Hi undefined

메소드로 정의한 화살표 함수 내부의 this 는 메소드를 호출한 객체를 가리키지 않고, 상위 컨텍스트인 전역 객체 window 를 가리키기 때문에, undefined 가 출력됩니다.

new 생성자

const Person = (name) => {
  this.name = name;
};
const me = new Person("Lee"); // TypeError: Person is not a constructor

화살표 함수는 생성자 함수로 사용할 수 없습니다.

call, apply, bind 메소드와 함께 함수를 호출할 때

const add = (a, b) => a + b;
// 화살표 함수는 call, apply, bind 메소드와 함께 호출할 수 없습니다.
add.call(null, 1, 2); // TypeError: add.call is not a function
add.apply(null, [1, 2]); // TypeError: add.apply is not a function
add.bind(null, 1, 2)(); // TypeError: add.bind is not a function

화살표 함수는 this 를 바인딩하지 않기 때문에, call, apply, bind 메소드와 함께 호출할 수 없습니다.

Prototype 메소드

const Person = (name) => {
  this.name = name;
};
Person.prototype.sayHi = function () {
  console.log(`Hi ${this.name}`);
};
const me = new Person("Lee"); // TypeError: Person is not a constructor

화살표 함수는 Prototype 메소드로도 지정할 수 없습니다.

Reference

  • [MDN] 화살표 함수
  • [Tistory] 자바스크립트 화살표 함수 완벽 정리
  • [javascript.Info] 화살표 함수 다시 살펴보기
저작자표시 비영리 동일조건 (새창열림)

'Javascript' 카테고리의 다른 글

[ Javascript ] 얕은 복사 vs 깊은 복사  (0) 2023.01.16
[ JavaScript ] ==, === 의 차이점  (0) 2023.01.16
[JavaScript] 자바스크립트를 멀티 스레드처럼 사용하는 방법  (0) 2023.01.09
[JavaScript] 실행 컨텍스트 그리고 클로저  (0) 2023.01.09
[JavaScript] 스코프, 스코프 체인 , 렉시컬 스코프  (0) 2023.01.09
    'Javascript' 카테고리의 다른 글
    • [ Javascript ] 얕은 복사 vs 깊은 복사
    • [ JavaScript ] ==, === 의 차이점
    • [JavaScript] 자바스크립트를 멀티 스레드처럼 사용하는 방법
    • [JavaScript] 실행 컨텍스트 그리고 클로저
    길잃은곰
    길잃은곰

    티스토리툴바