1. ES6의 함수 구분
구분 | constructor | prototype | super | arguments |
---|---|---|---|---|
일반 함수 | O | O | X | O |
메소드(단축표현) | X | X | O | O |
화살표 함수 | X | X | X | X |
2. 메소드
ES6에선 단축표현으로 작성된 함수만 메소드로 인정한다.
메소드는 [[HomeObject]]를 가지고 있어
super
사용이 가능하다.
3. 화살표 함수
3.1. 작성법
1 | // ()는 매개변수가 들어갈 자리, 한 줄일 경우 return 생략 가능 |
3.2. 장점
non-constructor라 prototype을 만들지 않는다.
매개변수 이름을 중복선언 할 수 없다.
화살표 함수의 this, arguments, super, new.target는 상위 스코프(화살표 함수가 아닌)를 참조 하기 때문에 중첩함수로 사용할 시 편하다.
3.3. 화살표 함수의 this
화살표 함수의 this, arguments, super, new.target는 상위 스코프(화살표 함수가 아닌)를 참조 한다.
arrowThis.js 1
2
3
4
5
6
7
8// 즉시 실행 함수의 this는 전역 객체를 가리킨다.
// call을 사용하여 호출가 동시에 새 객체를 this에 바인딩한다.
// 화살표함수는 자체적 this 바인딩이 없어 상위 스코프의 this를 찾는다
// 따라서 새 객체가 화살표 함수의 this가 된다.
(function () {
const foo = () => console.log(this);
foo();
}.call({ a: 1 })); // { a: 1 }화살표 함수의 this는 call, apply, bind로 변경 불가하다.
arrowCall.js 1
2
3
4
5window.name = "Yu";
const arrow = () => console.log(this.name);
arrow.call({ name: "Kim" }); // Yu따라서
this
를 사용하는메소드
나프로토타입 메소드
를 화살표 함수로 정의하면 위험하다.
3.4. 화살표 함수의 super, arguments
super를 바인딩 하지 않고 상위 스코프의 super를 가져온다.
1 | class Base { |
4. Rest 파라미터
...arg
처럼 앞에 …을 함께 쓴다.매개변수로 사용시 함수.length에 영향을 주지 않는다.
Rest 파라미터는 단 한 개만 사용해야 한다.
1 | function sum(...args) { |
5. 매개변수 기본 값
1 | function logName(name = "Lee") { |
매개변수에 값이 전달되지 않거나 undefined일 경우 들어갈 기본 값을 설정할 수 있다.
Rest 파라미터는 기본 값을 설정할 수 없다.
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !