모자딥 26장 ES6함수의 추가기능

릿·2023년 2월 5일
0

26장 ES6함수의 추가기능

26.1 함수의 구분


  • ES6이전의 모든 함수는 일반 함수로도 호출할 수 있고 생성자함수로도 호출할 수 있음

26.2 메서드


  • ES6메서드는 메서드 축약표현으로 정의된 함수만을 의미함
const obj = {
  x: 1,
  foo() { return this.x },
}
  • ES6메서드는 인스턴스를 생성할 수 없는 non-constructor이므로 생성자함수로서 호출할 수 없음
  • ES6메서드는 자신을 바인딩한 객체를 가리키는 내부 슬롯 [[HomeObject]]를 가짐

26.3 화살표 함수


26.3.1 화살표 함수 정의

함수 정의

함수표현식으로 정의

const multiply = (x, y) => x * y;
multiply(2, 3); // -> 6

매개변수 선언

  • 매개변수가 여러 개인 경우 소괄호 () 안에 매개변수를 선언
  • 매개변수가 하나일 경우에는 소괄호를 생략할 수 있음
  • 매개변수가 없을 경우 소괄호 생략 불가
const arrow = (x, y) => { ... };
const arrow = x => { ... };

함수 몸체 정의

  • 함수 몸체가 하나의 문으로 구성된다면 중괄호 {} 생략 가능
const = x => x ** 2;
power(2); // -> 4

// 위의 표현은 아래와 같음
const power => x => { return x ** 2; };

26.3.2 화살표 함수와 일반 함수의 차이

  1. 화살표 함수는 인스턴스를 생성할 수 없음 non-constructor임
  2. 화살표 함수는 중복된 매개변수 이름을 선언할 수 없음
  3. 화살표 함수는 함수 내부에서 this, arguments, super, new.target바인딩을 갖지 않음

26.3.3 this

  • 화살표 함수는 함수 자체의 this바인딩을 갖지 않으므로 화살표 함수 내에서 this를 참조하면 상위 스코프의 this를 그대로 참조하는데 이를 lexical this라 함

26.3.4 super

  • 화살표 함수는 함수 자체의 super바인딩을 갖지 않으므로 함수 내에서 super를 참조하면 상위스코프의 super를 참조함

26.3.5 arguments

  • 화살표 함수는 함수 자체의 arguments바인딩을 갖지 않으므로 함수 내에서 arguments를 참조하면 상위스코프의 arguments를 참조함

26.4 Rest 파라미터


26.4.1 기본 문법

  • Rest파라미터는 함수에 전달된 인수들의 목록을 배열로 전달받음
function foo(...rest) {
  // 매개변수 rest는 인수들의 목록을 배열로 전달받는 Rest파라미터다.
  console.log(rest); // [1, 2, 3, 4, 5]
}

foo(1, 2, 3, 4, 5);
  • Rest파라미터는 먼저 선언된 매개변수에 할당된 인수를 제외한 나머지 인수로 구성된 배열이 할당되므로, 반드시 마지막 파라미터여야 함
  • Rest파라미터는 단 하나만 선언할 수 있음

26.4.2 Rest 파라미터와 arguments 객체

  • ES5에서 가변 인자 함수인 경우 arguments객체를 활용하여 인수를 전달받음
  • arguments객체는 유사배열객체이고, 함수 내부에서 지역변수처럼 사용할 수 있음
function sum() {
  // 가변 인자 함수는 arguments 객체를 통해 인수를 전달받음
  console.log(arguments)
}
  • ES6에서는 Rest파라미터, arguments객체 둘 다 사용할 수 있지만 화살표함수는 arguments객체를 가지지 않기 때문에 가변 인자 함수를 구현할 때는 반드시 Rest파라미터를 사용해야 함

26.5 매개변수 기본값


  • ES6에서 도입된 매개변수 기본값을 사용하면 인수 체크 및 초기화를 간소화할 수 있음
function sum(x = 0, y = 0) {
  return x + y;
}
  • Rest파라미터에는 기본값을 지정할 수 없음
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글