하지만 정식 선언법은 잘 안쓴다 (순서대로 되어야지!) 그래서 쓰이는게 함수선언 표현식이다.
<!DOCTYPE html>
<meta charset="UTF-8">
<script>
// 정식 선언법
alert(test()); //??
function test(){
// 아무것도 안쓰면 자동으로 return이 들어감
}
</script>

<!DOCTYPE html>
<meta charset="UTF-8">
<script>
// 정식 선언법
alert(test()); //?? hoisting(호이스팅) -> 선언부만 맨위로 올리는 거 -> 성능향상 그래서 function이 실행됨
/* function test(){
// 아무것도 안쓰면 자동으로 return이 들어감
// return "흥치뿡";
} */
</script>
이렇게하면 에러가 난다 순서대로 읽는 인터프리터 방식을 그대로 적용되기 때문에
개발자 입장에서는 순서대로 읽히는 이 방식이 정상이다 라고 생각하기 때문에 함수 선언 표현식을 사용한다.
<!DOCTYPE html>
<meta charset="UTF-8">
<script>
// 정식 선언법
alert(test()); //?? hoisting(호이스팅) -> 선언부만 맨위로 올리는 거 -> 성능향상 그래서 function이 실행됨
// 함수 선언 표현식
const test = function(){ return "메롱" }; //익명 함수에 변수명이 준 느낌!
</script>

💡 해결방법
<!DOCTYPE html>
<meta charset="UTF-8">
<script>
// 함수 선언 표현식
// 표현식 1+2+3 -4 -6 (표현식 : 연산을 통해서 한개의 결과로 도출하는것을 표현식이라 함)
const test = function(){ return "메롱" }; //익명 함수에 변수명이 준 느낌!
alert(test());
</script>
함수 표현식에서 무엇이든 매개변수로 받을 수 있다
<!DOCTYPE html>
<meta charset="UTF-8">
<script>
const test = function(pArg){
alert(typeof(pArg));
}
test(272);
test("e7e");
test([1,2,3]);
test({name:"정수"});
// 이 케이스가 아주 많이 사용된다 (함수를 매개변수로 보냄 callback이라 부름 -> 비동기 덕분에 더 인기
test(function(){});
</script>