기본값 함수 매개변수 (Default parameter)
값이 없거나 undefined가 전달될 경우 이름붙은 매개변수를 기본값으로 초기화할 수 있다.
function multiply(a, b = 1) {
return a * b;
}
multiply(5, 2) // 10
multiply(5) // 5
multiply(5, undefined) // 5
자바스크립트에서 함수의 매개변수는 기본적으로 'undefined'이지만 어떤 때는 기본값을 특정 값으로 정해야 할 때가 있는데 그 때 기본값 함수 매개변수를 유용하게 사용할 수 있다.
파이선과는 달리 자바스크립트에서는 기본 인수가 호출 시에 평가되므로 함수가 생성될 때마다 새로운 객체가 생성된다.
function append(value, array = []) {
array.push(value)
return array
}
append(1) // [1]
append(2) // [1, 2]가 아니라 [2]가 나온다(새로운 객체가 만들어졌기 때문).
//이것은 함수나 변수에서도 마찬가지이다.
function callSomething(thing = something()) {
return thing
}
let numberOfTimesCalled = 0
function something(){
numberOfTimesCalled += 1
return numberOfTimesCalled
}
callSomething() // 1
callSomething() // 2
앞쪽 매개변수를 뒷쪽의 매개변수 기본값에 사용할 수 있다.
function greet(name, greeting, message = greeting + ' ' + name) {
return [name, greeting, message]
}
greet('David', 'Hi') // ["David", "Hi", "HiDavid"]
greet('David', 'Hi', 'Happy Birthday!') // ["David", "Hi", "Happy Birthday!"]
주의! 함수 내부에 선언된 함수와 변수들은 매개변수 기본값 초기화시에 참조할 수 없다.
(유효범위 효과 (Scope Effects)를 주의)
//기본값 매개변수는 자식 스코프를 참조할 수 없다!
function f(a = go()) { // `f`가 호출 되면 `ReferenceError`가 발생한다.
function go() { return ':P' }
}
//자식 스코프에서 선언된 변수는 부모스코프에서 사용할 수 없다!
function f(a, b = () => console.log(a)) {
let a = 1
b() // `undefined`를 인쇄한다.
}
참고 MDN
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/Default_parameters
기본값 매개변수
기본값 함수 매개변수 (default function parameter)를 사용하면 값이 없거나 undefined가 전달될 경우 이름붙은 매개변수를 기본값으로 초기화할 수 있습니다.
developer.mozilla.org
'JavaScript' 카테고리의 다른 글
in 연산자 - JavaScript (0) | 2020.11.27 |
---|---|
구조 분해 할당(Destructing assginment) - JavaScript (0) | 2020.11.27 |
arguments 객체 - JavaScript (0) | 2020.11.27 |
Rest 파라미터(...args) - JavaScript (1) | 2020.11.27 |
import와 export - ES6 (0) | 2020.11.23 |