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 화살표 함수와 일반 함수의 차이
- 화살표 함수는 인스턴스를 생성할 수 없음 non-constructor임
- 화살표 함수는 중복된 매개변수 이름을 선언할 수 없음
- 화살표 함수는 함수 내부에서 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;
}