JavaScript - default parameter


매개변수 기본값. 함수의 인자로 넘어온 애들의 기본값을 지정해줄 수 있다.

원래는 다음과 같이 해준다.

const f = function(x,y,z){
  x = x ? x: 4
  y = y || 5
  if(!z){
    z = 6
  }
}

f(1) // 1 5 6

이런 식으로 함수 내에서 해줬다.

f(0, null) //4 5 6

정말 값이 넘어오지 않은 것을 확인하고 싶다면

x = x === undefined ? x : 4 //0 5 6
y = typeof y === 'undefined' || 5

로 바꿔주면 된다.

이제는

const f = function(x=4, y=5, z=6){
}

f(0, null) //0 null 6

이렇게 쉽게 하면 된다.

undefined 혹은 누락된 파라미터에 대해서만

function a (a = 1, b = a + 1, c = 3){
  
}

a(1, undefined, 3) // 1 2 3이 된다.

function a (a = 1, b = c + 1, c = 3){ //이건 안된다. let선언과 동일한 효과여서 순서가 중요하다.
  
}

let 선언과 동일한 효과

TDZ에 걸린다.

기본값으로 할당하고자 하는 값이 변수일 경우 주의사항

let a = 10
let b = 20
function f(aa = a, b = b){
  console.log(aa, b)
}

f(1) // b is not defined. 인자로 선언할 변수 명은 달라야 한다. TDZ와 관련.

arguments에 영향을 주냐

//유사배열 객체(array-like object): 객체인데, 각 프로퍼티의 키가 인덱스이고, length라는 프로퍼티가 있는 객체
const a = function(a = 1, b = 2, c = 3){
  console.log(arguments) //함수의 인자들을 배열처럼 생긴 객체로 만들어줌.
  //유사 배열 객체 {0:1, 1:2, 2:3, length:3, callee: , }
  console.log(a,b,c)
}

a() //argument에 아무것도 안 들어간다.
a(4)
a(4, 5)
a(4, undefined, 6)
a(4, 5, 6)

arguments에는 실제 인자로 넘겨준 모든 애들을 배열로 갖는다.

a(4,5,6,6,7) 해도 arguments 에는 [0:4, 1:5, 2:6, 3:7,,,]이렇게 들어갈 것이다. 넘겨준 인자들을 통으로 받는 객체이다. arguments는 객체인데 배열 메소드를 호출하면 에러가 난다.