위 그림에서 이해가 안되는 점이 발견됐다.
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
를 반환한다! 기억할 것!