개요
과거에 기본값 설정은 함수 내부에서 매개변수 값을 검사해 undefined인 경우 값을 할당하는 방식이었다.
function multiply(a, b) {
b = (typeof b !== 'undefined') ? b : 1
return a*b
}
이제는 기본값 매개변수를 통해 간단히 default값을 줄 수 있다.
function multiply(a, b = 1) {
return a*b
}
응용 1
기본값은 호출 시에 평가되어, 함수가 호출될 때마다 새로운 객체가 생성된다.
function goodCoder(coding = coder()) {
return coding
}
let numberOfTimesCalled = 0
function coder(){
numberOfTimesCalled += 1
return numberOfTimesCalled
}
goodCoder() // 1
goodCoder() // 2
응용 2
앞쪽의 매개변수는 뒷쪽의 매개변수 기본값에 사용할 수 있다.
function coder(name, greeting, message = greeting + ' ' + name) {
return [name, greeting, message]
}
console.log(coder('Noran', 'Hi')); // ["Noran", "Hi", "Hi Noran"]
console.log(coder('Noran', 'Hi', 'Happy Birthday!')); // ["Noran","Hi","Happy Birthday!"]
유효범위 효과 (Scope Effects)
한개 이상의 매개변수에 기본값이 지정되면 매개변수 목록내의 식별자들(identifiers) 대상으로 두번째 스코프(Environment Record)가 생성된다.
그렇게 되어 함수 내부에서 선언된 함수와 변수들은 매개변수 기본값에 참조할 수 없다.
예제 1 : 아래 코드는 ` f `를 호출 시 ReferenceError를 발생시킨다.
function f(a = go()) {
function go() { return ':P' }
}
예제 2 : 아래 코드는 매개변수 가본값이 자체 스코프에 있으므로 undefined를 프린트한다.
function f(a, b = () => console.log(a)) {
var a = 1
b()
}
출처 : MDN https://developer.mozilla.org/ko
'🟨 JavaScript > 개념' 카테고리의 다른 글
| [드림코딩] Early return, early exit? (0) | 2022.04.21 |
|---|---|
| [드림코딩, comp110 외] 매개변수 (parameters)와 나머지 매개변수(rest parameters) (0) | 2022.04.18 |
| [생활코딩, 드림코딩, 코딩앙마] 연산자(Operator)와 break, continue (0) | 2022.04.14 |
| [코딩앙마 외] 객체 리터럴과 객체 접근법, 그리고 생성자 함수 (0) | 2022.04.14 |
| [코딩앙마 외] 객체(Object)와 프로퍼티(property) (0) | 2022.04.14 |