• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

a에 값을 안 주었을 때 왜 object가 + 되서 나오는 걸까요?

19.09.12 15:06 작성 조회수 76

0

function sum(a = 0, b = { value: 0 }) {

return a + b.value;

}

sum(b = { value: 10 });

하면 결과가 10이 나올거라 예상했는데,  "[object Object]10" 이 나오는데요.  default parameter로 a = 0을 줬으면 a에 0이 세팅되어야 한다고 예상했는데 전혀 아닌데요...

답변 1

답변을 작성해보세요.

1

James Jeon님의 프로필

James Jeon

2019.10.17

매개변수는 파라미터의 앞부분부터 순차적으로 전달되기 때문에 넘겨진 "b = { value: 10 }" 값은

b 파라미터가 아닌 a 파라미터로 전달되게 됩니다.

따라서 함수 내부에서 a를 출력해보시면, "{ value: 10}" Object가 전달된 것을 확인하실 수 있습니다.

이름을 명시해서 해당 값만 전달하고 싶으시다면, 정의를 조금 변경해서 사용해야 할 것 같습니다.

function sum({a = 0, b = { value: 0 }}) {
 return a + b.value;
}

console.log(sum({b: { value: 10 }}));

이렇게 하면 "{ b: { value: 10 } }" Object를 파라미터로 전달하게 되는데,

"{ a = 0, b = { value: 0 } }" Object 파라미터에서 b 키에 값이 맵핑되어

해당 파라미터 값은 "{ a: 0, b: { value: 10 } }"이 됩니다. (a 키의 값은 Default 값에 의해 0)

그렇게 한다면, 의도하는 것과 같이 함수가 10을 반환합니다.