고슴맨쉬
망치와 공(空)
고슴맨쉬
  • 분류 전체보기 (155)
    • 💡 UXUI (4)
      • UXUI (2)
      • UI (2)
      • UX (0)
    • 🟨 JavaScript (66)
      • 개념 (42)
      • 정리 (2)
      • 문제풀기 (프로그래머스, 코딩애플) (15)
      • 응용하여 자동화or문제해결하기 (2)
      • 기타 (5)
    • ⚛️ React (49)
      • 개념 (27)
      • 개념(Redux) (3)
      • 정리 (4)
      • 문제풀기 (코딩애플: React) (15)
    • 📘 TypeScript (10)
      • 개념 (8)
      • 문제풀기 (코딩애플) (2)
    • 🌐 HTML,CSS (18)
      • 실무에서 자주 발생한 오류들 (10)
      • 뒤늦게 알아서 뼈아픈 유용한 CSS (6)
      • 기타 자주 쓰는 CSS (2)
    • 💻 CS (8)
      • CS (5)
      • 정규표현식 (2)
      • Git,Github (1)

태그

  • json
  • array
  • Props
  • JavaScript
  • redux
  • 코딩애플
  • state
  • 프로그래머스
  • Ajax
  • object
  • axios
  • useEffect
  • CS
  • UXUI
  • CSS
  • 삼항연산자
  • react
  • TypeScript
  • 오류
  • class
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
고슴맨쉬

망치와 공(空)

🟨 JavaScript/개념

[mdn] 기본값 매개변수

2022. 4. 15. 17:07

개요

과거에 기본값 설정은 함수 내부에서 매개변수 값을 검사해 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
    '🟨 JavaScript/개념' 카테고리의 다른 글
    • [드림코딩] Early return, early exit?
    • [드림코딩, comp110 외] 매개변수 (parameters)와 나머지 매개변수(rest parameters)
    • [생활코딩, 드림코딩, 코딩앙마] 연산자(Operator)와 break, continue
    • [코딩앙마 외] 객체 리터럴과 객체 접근법, 그리고 생성자 함수
    고슴맨쉬
    고슴맨쉬
    부수되 집착하지 않고, 이해하되 머무르지 않기

    티스토리툴바