'함수'는 특정한 일을 하는 코드의 묶음.
함수는 더 다양하고 의미 있는 일을 하기 위해 '매개 변수' 또는 '인자'라고 하는 입력값을 전달 받을 수 있다. 문자, 숫자, 객체 등을 전달 받을 수 있음. 또한 함수는 또다른 함수를 인자로 전달 받을 수 있다. 다른 함수의 인자로 전달되는 함수를 '콜백 함수'라고 한다. 
이 콜백 함수는 콜백 함수를 전달 받은 함수에 의해 호출이 됨. 
main 함수를 만들었음. 이 함수는 매개 변수로 x를 받고 그대로 콘솔에 출력함. 

main 함수의 인자로 숫자를 넣을 수도 있고,


문자열을 전달할 수도 있음.
그렇지만 나는 인자로 함수를 전달해보겠음.
main 함수 밑에 '안녕'을 출력하는 'sayHello'라는 함수를 하나 만듦.
이 함수를 main 함수의 인자로 전달해보겠음. 그럼, main 함수의 매개 변수로 sayHello 함수가 들어가게 됨. 
그래서 이렇게 출력이 됨.
main 함수가 전달 받은 x는 함수이기 때문에 함수 뒤에 소괄호를 붙여서 콜백 함수를 호출시켜 줄 수 있다.


'안녕' 출력.
내가 main 함수를 호출할 때, sayHello라는 함수를 인자로 전달해줬기 때문에 
main 함수의 x 매개변수로 
들어가게 됨.
내가 전달해준 콜백 함수는 콜백 함수를 전달 받은(main) 함수에 의해서 호출된다!
콜백 함수를 인자로 전달할 때, 함수 뒤에 ()소괄호를 붙이는 것. 이렇게 되면 그 함수는 즉각적으로 호출돼버림. 즉, 함수를 전달하는 것이 아니라 함수의 리턴값을 전달하게 되는 것임.
위 코드에서는 콜백 함수로 전달해줄 함수를 밖에다 빼서 정의를 해줬음. 꼭 그렇게 해야 하는 것은 아님. main 함수 소괄호 안에다가 바로 넣어줘도 됨. 
이렇게도 가능. 근데 바로 넣어줬으므로 함수 이름은 필요없으니까 제거. 익명함수로 전달해줄 수 있다는 것. 만약, 이 코드보다 더 간결하게 쓰고 싶다면? '화살표 함수'.
function 키워드를 지우고 
화살표를 넣어주면 됨. 
greetToUser 함수는 여러가지 언어로 사용자에게 인사를 하는 함수. 함수가 어떤 언어로 인사를 할지는 전달해줄 콜백 함수인 'greet'에 달렸음. 콜백 함수를 하나 만들자. 

잘 출력됨.


전달해준 콜백 함수를 호출(greet)할 때, 콜백 함수의 인자로 함수 내부에서 정의한 name이라는 변수를 집어넣어줌.

greetInKorean이 실행될 때, '코딩'이 name으로 들어가게 됨. 그래서 콘솔에 '코딩님, 안녕하세요.'가 출력됨.

콜백 함수를 하나 더 만들어주면, 
잘 출력됨.
콜백 함수를 사용하면 마치 부품을 갈아끼우는 것처럼 함수의 인자를 원하는 콜백 함수로 교체하면서 다른 기능을 하게끔 할 수 있다.