티스토리 뷰
기본 매개변수(Default parameter)
default parameter은 함수에 전달된 파라미터의 값이 undefined이거나 전달된 값이 없을 때, 초기화 설정된 값을 말합니다.
1. 문법
기본 문법은 아래와 같습니다.
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) { statements }
default parameter를 사용하지 않는다면, 밑의 코드와 같이 코딩해야 합니다.
function multiply(a, b) { b = (typeof b !== 'undefined') ? b : 1; return a * b; } console.log(multiply(5, 2)); // 10 console.log(multiply(5, 1)); // 5 console.log(multiply(5)); // 5
default parameter를 사용안함
default parameter을 사용한다면, 밑에 코드와 같이 됩니다.
function multiply(a, b = 1) { return a * b; } console.log(multiply(5, 2)); // 10 console.log(multiply(5, 1)); // 5 console.log(multiply(5)); // 5
default parameter 사용
default parameter을 사용한다면, 예외처리 없이 간단히 코딩 할 수 있습니다.
2. Default parameter의 undefined와 null 처리
default parameter은 함수에 전달된 파라미터가 undefined 이거나 전달되지 않았을 경우, 설정한 값으로 초기화 됩니다.
function getName(name = 'foo') { return name; } console.log(getName()); console.log(getName(undefined)); console.log(getName(null)); console.log(getName("bar"));
Default parameter의 undefined와 null 처리
getName 함수에 파라미터가 전달이 안됬거나, undefined가 전달되었을 경우, default parameter인 foo가 출력되는 것을 확인 할 수 있습니다.
getName 함수에 파라미터가 null이 전달 되었을 경우, 그대로 null이 출력되며, 값을 넘겨줄때도, 넘겨준 값이 출력되는 것을 확인 할 수 있습니다.
3. Default parameter 호출
default parameter은 함수가 호출될 때마다 새로운 객체를 생성합니다.
function append(value, array = []) { array.push(value); return array; } console.log(append(1)); //[1] console.log(append(2)); //[2], not [1, 2]
함수 호출될 때 마다 새로운 객체를 생성합니다.
default parameter로 함수, 변수 모두 가능합니다.
function callSomething(thing = something()) { return thing; } function something(){ return "sth"; } console.log(callSomething()); //sth
함수, 변수 모두 가능합니다.
4. Default parameter 이후 Default parameter 사용
default parameter은 이후에 따라오는 default parameter에서 사용 가능합니다.
function person(name = "foo", age = "20", action = name + " eat!!") { console.log(name); console.log(age); console.log(action); } person();
이후에 따라오는 default parameter에서 사용 가능합니다.
5. Default parameter의 근사처리
default parameter은 여러 edge case를 핸들링합니다.
function go() { return ":P" } function withDefaults(a, b = 5, c = b, d = go(), e = this, f = arguments, g = this.value) { return [a,b,c,d,e,f,g]; } function withoutDefaults(a, b, c, d, e, f, g){ switch(arguments.length){ case 0: a case 1: b = 5 case 2: c = b case 3: d = go(); case 4: e = this case 5: f = arguments case 6: g = this.value; default: } return [a,b,c,d,e,f,g]; } console.log(withDefaults.call({value:"=^_^="})); // [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="] console.log(withoutDefaults.call({value:"=^_^="})); // [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
default parameter은 여러 edge case를 핸들링합니다.
6. Default parameter이 함수일 경우
// Doesn't work! Throws ReferenceError. function f(a = go()) { function go(){return ":P"} } f();
default parameter의 값이 함수일 경우 유의사항
default parameter의 값이 함수인데, 그 함수가 default parameter을 사용한 함수 안에서 정의 되었을 경우, ReferenceError, not defined 에러가 발생합니다. default parameter로 함수를 사용할 경우 그 함수가 먼저 정의 되어야 합니다.
7. Default parameter 뒤에 Default parameter가 아닌 경우
function f(x=1, y) { return [x, y]; } console.log(f()); // [1, undefined]
Default parameter 뒤에 Default parameter가 아닌 경우
default parameter 뒤에 default parameter아 아닌 경우, Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2) 이전에는 SyntaxError가 발생하였지만, 이 문제는 해결되어, 이후 버전에는 정상 동작하게 되었습니다.
8. 구조분해 할당(Destructuring assignment)
default parameter은 destructuring assignment이 가능합니다.
function f([x, y] = [1, 2], {z: z} = {z: 3}) { return x + y + z; } console.log(f()); // 6
default parameter은 destructuring assignment이 가능합니다.
'JavaScript' 카테고리의 다른 글
[자바스크립트] ES6(ECMA Script 6) - 화살표 함수(Arrow function) (3) | 2017.01.19 |
---|---|
[자바스크립트] ES6(ECMA Script 6) - 구조분해 할당(Destructuring assignment) (7) | 2017.01.18 |
[자바스크립트] ES6(ECMA Script 6) - 나머지 매개변수(Rest parameter) (1) | 2017.01.16 |
[자바스크립트] OOP, ES6(ECMA Srcipt 6) - 클래스(Class) (0) | 2017.01.16 |
[자바스크립트] getter, setter (6) | 2017.01.13 |