

위 그림에서 이해가 안되는 점이 발견됐다.
console 창 첫째 줄의 '3, 김개발'은 어디서 나왔는가!
function consoleSuccess(month, name) { console.log(month, name); } let result = consoleSuccess("3", "김개발"); console.log("consoleSuccess 호출 값은" + result);
궁금증을 해결하기 위해 밑에서 부터 한 줄씩 지워봤다.
function consoleSuccess(month, name) { console.log(month, name); } let result = consoleSuccess("3", "김개발");
이렇게 했는데도 console창에서 '3, 김개발'이 찍혔다.
function은 함수를 정의하는 것이니 console창에 뜨지 않을테고, let도 변수를 선언하는 것일 뿐 console창에는 뜨지 않아야 하는 것이 아닌가 하는 의문이 들었다.
정답은 바로 consolSuccess 함수를 정의하는 과정에서 나온 console.log였다.
일단 내가 생각한대로 첫줄의 consoleSucces 함수를 정의하는 과정에서는 아무것도 뜨지 않는다.
let result = consoleSuccess("3", "김개발");
이 부분에서 result에는 consoleSuccess("3", "김개발") 의 값이 담겨야 하는데 값이 담기려면 일단 함수를 실행시켜 값을 알아내야 한다.
여기서 consoleSuccess함수가 실행이 되고 그 과정에서 consoleSuccess함수 안에 담겨있던 console.log가 실행되는 것이다.
물론 consoleSuccess함수는 현재 return값이 정해져 있지 않기 때문에 result는 undefined가 되겠지만 함수를 실행시키는 과정에 있던 console.log만 남는 것이다.
함수를 정의하는 과정에서
return이 없으면return이 생략된 것이라고 하니 당연히 안에 남아있던console.log(month, name)가return값으로 나올 것이라고 생각했던 것이 문제의 원인이었던 것 같다.
return이 생략되어있다면 함수는undefined를 반환한다! 기억할 것!