일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 중고나라사기
- autocomplate
- 정직하게사세요
- webpack.config.js
- Hooks
- 중고나라
- 유효성검사
- 마사지
- Webpack
- 스노쿨링
- plugin
- 구분
- 세부
- js
- 네이버페이사기
- 맛사지
- 특수문자
- 삼성무선청소기제트
- 여행
- 자동완성
- 스쿠버다이빙
- JavaScript
- 중고거래사기
- 사기
- REACT
- 해외여행
- 정규식
- 막탄
- ES6
- Today
- Total
Ryu.log
[ECMAScript6] - Rest 파라미터 본문
기본 파라미터 초기값 (Default Parameter value)
ES5에서는 파라미터에 초기값을 설정할 수 없다. 따라서 적절한 인수가 전달되었는지 함수 내부에서 확인할 필요가 있다.
// ES5 function plus(x, y) { x = x || 0; y = y || 0; return x + y; } console.log(plus()); // 0 console.log(plus(1, 2)); // 3
ES6에서는 파라미터에 초기값을 설정하여 함수 내에서 수행하던 파라미터 체크 및 초기화를 간편화할 수 있다.
// ES6 function plus(x = 0, y = 0) { // x, y에 인수가 할당되지 않으면 초기값 0이 할당된다. return x + y; } console.log(plus()); // 0 console.log(plus(1, 2)); // 3
Rest 파라미터 (Rest Parameter)
Rest 파라미터는 Spread 연산자(...
)를 사용하여 파라미터를 작성한 형태를 말한다. Rest 파라미터를 사용하면 인수를 함수 내부에서 배열로 전달받을 수 있다.
function foo(...rest) { console.log(Array.isArray(rest)); // true console.log(rest); // [ 1, 2, 3, 4, 5 ] } foo(1, 2, 3, 4, 5);
인수는 순차적으로 파라미터와 Rest 파라미터에 할당된다.
function foo(param, ...rest) { console.log(param); // 1 console.log(rest); // [ 2, 3, 4, 5 ] } foo(1, 2, 3, 4, 5); function bar(param1, param2, ...rest) { console.log(param1); // 1 console.log(param2); // 2 console.log(rest); // [ 3, 4, 5 ] } bar(1, 2, 3, 4, 5);
Rest 파라미터는 반드시 마지막 파라미터이어야 한다.
function foo( ...rest, param1, param2) { } foo(1, 2, 3, 4, 5); // SyntaxError: Rest parameter must be last formal parameter
arguments와 rest 파라미터
ES5에서는 인자의 갯수를 사전에 알 수 없는 가변 인자 함수의 경우, arguments 객체를 통해 인자값을 확인한다. arguments 객체는 함수 호출 시 전달된 인수(argument)들의 정보를 담고 있는 순회가능한(iterable) 유사 배열 객체(array-like object)이다. 함수 객체의 arguments 프로퍼티는 arguments 객체를 값으로 가지며 함수 내부에서 지역변수처럼 사용된다.
// ES5 var foo = function () { console.log(arguments); }; foo(1, 2); // { '0': 1, '1': 2 }
가변 인자 함수의 경우, 파라미터를 통해 인수를 전달받는 것이 불가능하므로 arguments 객체를 활용하여 인수를 전달받는다. 하지만 arguments 객체는 유사 배열 객체이기 때문에 배열 메소드를 사용하려면 Function.prototype.call, Function.prototype.apply를 사용하여야 하는 번거로움이 있다.
// ES5 function sum() { // 가변 인자 함수의 경우, 파라미터를 통해 인수를 전달받는 것이 불가능하므로 arguments 객체를 활용하여 인수를 전달받는다. // arguments 객체를 배열로 변환 var array = Array.prototype.slice.call(arguments); return array.reduce(function (pre, cur) { return pre + cur; }); } console.log(sum(1, 2, 3, 4, 5)); // 15
또한 ES6의 Arrow function에는 함수 객체의 arguments 프로퍼티가 없다. 따라서 화살표 함수에서 가변 인자 함수를 구현해야하는 경우, 반드시 rest 파라미터를 사용하여야 한다.
var es5 = function () {}; console.log(es5.hasOwnProperty('arguments')); // true const es6 = () => {}; console.log(es6.hasOwnProperty('arguments')); // false
ES6에서는 rest 파라미터를 사용하여 가변인자를 함수 내부에
// ES6 function sum(...args) { console.log(arguments); // (5) [1, 2, 3, 4, 5, callee: (...), Symbol(Symbol.iterator): function] console.log(Array.isArray(args)); // true return args.reduce((pre, cur) => pre + cur); } console.log(sum(1, 2, 3, 4, 5)); // 15
'Prev-content' 카테고리의 다른 글
[ React-Tutorial-02 ] React 프로젝트 시작 (0) | 2018.05.24 |
---|---|
[ React-Tutorial-01 ] React 란? (0) | 2018.05.24 |
[ECMAScript6] - Arrow function 화살표 함수 (0) | 2018.02.13 |
[ECMAScript6] - Template Literals 템플릿 리터럴 (0) | 2018.02.13 |
[ECMAScript6] - let, const와 블록 레벨 스코프 (0) | 2018.02.12 |