함수 선언문을 풀어쓴 것이 함수 표현식이다.
함수는 인풋과 아웃풋만이 있다는 걸 기억하자.
함수를 담고 있는 변수는 참조형 변수이다.
함수에서 출력은 (return)
let add = function (a,b) {
return a + b;
}
함수 하나를 정의하고 add변수에 선언한 것. 함수가 담긴 add 변수를 부르면 해당함수가 실행됨.
console.log(add(1,2));
만약 add(1,2);로만 한다면? 출력이 되지 않음.
why? add(1,2);는 말그대로 함수를 돌리고 나온 리턴값에 불과함 즉 add(1,2); = 그냥 3인 거임.
콘솔로 3을 출력을 해줘야 함.
그렇다면 여기서 질문
:함수내에 return이 없고 바로 console로 찍는 로직은 뭘까?
let add = function (a,b) {
let results = a + b;
console.log(results);
}
이 경우 출력방식이 다르다. 이 함수는 console이 필요없고 add(1,2);만 입력해도 콘솔 결과가 3이 찍힌다. 그러나 이 값을 변수에 담아 출력한다면? let res = add(1,2); console.log(res) :undefined가 나온다.
why!? 콘솔로 끝나는 함수는 함수 내에서 값이 출력되고 함수가 끝나버린다. 리턴값의 경우 인자에 인풋이 들어오면 리턴=아웃풋을 뱉어낸다. 그래서 우리는 그 뱉어진 리턴값을 가지고 변수에 넣어 이곳 저곳에서 사용할 수 있는 것인데. 리턴값이 없고 바로 콘솔이 찍히는 함수는 리턴값을 뱉어내지 않기에 기능만을 수행하고 함수가 종료되는 것이다.
그래서 두 가지 출력방식이 다른 것도 리턴이 있는 함수의 경우 인풋을 넣고 아웃풋이 만들어졌으니 그것을 함수 밖에서 콘솔로 출력하는 것이다. 솜을 넣어 인형을 만들고 그것을 포장상자에 담아 외부로 보여줄 수 있는 것이다. 혹은 그냥 인형만 나가거나. 그러나 콘솔로그만 있는 함수는 솜을 넣고 인형을 만들어서 포장상자 없이 바로 외부로 나가야 한다. 포장 상자에 담을 수 없다.