반응형
함수구분
ES6에서는 함수를 3가지로 분류했다.
구분 | constructor | prototype | super | arguments |
---|---|---|---|---|
일반함수 | O | O | X | O |
메서드 | X | X | O | O |
화살표 함수 | X | X | X | X |
메서드
메서드는 메서드 축약표현으로 정의된 함수만을 의미한다.
인스턴스를 생성할 수 없고, prortotype이 없으며, super 키워드를 사용할 수 있다.
화살표 함수
간략하게 함수를 정의한다.
표현뿐 아니라 내부 동작도 간략하다.
함수정의
함수 선언문으로 정의가 불가능하다.
함수 표현식으로 정의한다.
매개변수 선언
여러개인경우 소괄호 안에 선언한다.
하나인 경우 소괄호도 생략가능하다.
매개변수가 없는 경우, 생략이 불가능하다.
const arrow=(x,y)=>{ ... };
const arrow=x=>{ ... };
const arrow=()=>{ ... };
함수몸체 정의
함수 몸체가 하나의 문이라면 { } 생략가능하다.
표현식인 문인경우, 암묵적으로 반환된다.
화살표 함수와 일반 함수의 차이
- non-constructor이다, 프로토타입이 없다.
- 중복된 매개변수 이름을 선언할 수 없다. → 일반함수는 된다.
- this, arguments, super, new.target 바인딩을 갖지 않는다.
- 단, 중첩된 경우, 스코프 체인 상에서 가장 가까운 화살표 함수가 아닌 함수의 this, arguments, super, new.target을 참조한다.
- this또한 따로 this를 가지지 않기때문에 bind, apply, call 메서드를 써도 애로우펑션의 this를 교체할 수 없다.
- 애로우 펑션은 렉시컬 this(상위스코프의 this)를 갖는다.
Rest파라미터
나머지 매개변수라고 불리는 Rest파라미터는 매개변수 앞에 …을 붙여서 정의한 매개변수를 의미한다.
function foo(...rest){
console.log(rest);
}
일반 매개변수와 rest파라미터는 함께 사용가능하다.
function foo(p, ...rest){
console.log(p); //1
console.log(rest); // [2,3,4,5]
}
foo(1,2,3,4,5);
다만, Rest파라미터는 정말 나머지 인수들이므로, 마지막 순서에 와야하며, 단 하나만 선언할 수있다.
반응형