1. 함수의 구분
- ES6 이전: 별다른 구분 x(일반 함수로서 호출도 가능하고 생성자 함수로서 호출도 가능) -> 생성자 함수로 호출되지 않아도 프로토타입 객체 생성, 실수 유발
- ES6: 사용 목적에 따라 세 종류로 구분
1) 일반함수 : 함수 선언문이나 함수 표현식으로 정의, ES6 이전의 함수와 차이 없음, constructor
2) 메서드 : ES6 이전의 함수와 차이 있음, non-constructor
- ES6 이전: 별다른 정의 x, 객체에 바인딩된 함수를 일컫는 의미
- ES6 : 메서드 축약 표현으로 정의된 함수만을 의미, 인스턴스를 생성할 수 없는 non-constructor, 메서드 아닌 함수는 super 사용 불가
-> ES6 메소드는 super기능을 추가하고, 맞지 않는 기능인 constructor을 제거함.
3) 화살표 함수 : ES6 이전의 함수와 차이 있음, non-constructor
- 콜백함수 내부에서 this가 전역 객체를 가리키는 문제를 해결하기 위한 대안으로 유용, 콜백함수로서 정의할 때 유용
- 함수 선언문으로 정의 불가능, 함수 표현식으로 정의 해야 함.
2. 화살표 함수와 일반 함수의 차이
1) 화살표 함수는 인스턴스를 생성할 수 없는 non-constructor
2) 화살표 함수는 중복된 매개변수 이름을 선언할 수 없음.(일반 함수는 에러 발생 x)
3) 화살표 함수는 함수 자체의 this, arguments, super, new.target 바인딩 갖지 않음
4) this 바인딩
일반 함수로서 호출되는 모든 함수 내부의 this는 전역 객체를 가리킴
화살표 함수는 자체적으로 this 바인딩을 갖지 않음, 상위 스코프의 this를 참조함 -> 정의된 위치에 의해 결정
(화살표 함수를 제외한 모든 함수에는 this 바인딩 존재)
-> 화살표 함수로 메서드를 정의하는 것은 바람직하지 않음.
5) super, arguments 바인딩
화살표 함수는 자체적으로 super, arguments 바인딩을 갖지 않음, 상위 스코프의 super, arguments 참조
arguments 바인딩을 갖지 않으므로, 화살표 함수로 가변 인자 함수 구현할 때는 Rest 파라미터 사용해야 함.
3. Rest 파라미터
함수에 전달된 인수들의 목록을 배열로 전달받음
유사 배열 객체 arguments 객체를 배열로 변환할 필요 없다는 장점.
함수와 ES6 메서드는 Rest 파라미터랑 arguments 객체 모두 사용 가능하지만,
화살표 함수는 Rest 파라미터만 사용가능(함수 자체의 arguments 객체를 갖지 않으므로)
'스터디 > 모던 자바스크립트 Deep Dive(24.02-24.06)' 카테고리의 다른 글
35장. 스프레드 문법 (0) | 2024.05.06 |
---|---|
34장. 이터러블 (0) | 2024.05.06 |
25장. 클래스 (0) | 2024.05.06 |
24장. 클로저 (0) | 2024.04.24 |
23장. 실행 컨텍스트 (0) | 2024.04.24 |