정식 선언법

하지만 정식 선언법은 잘 안쓴다 (순서대로 되어야지!) 그래서 쓰이는게 함수선언 표현식이다.

<!DOCTYPE html>
<meta charset="UTF-8">
<script>
// 정식 선언법
alert(test());  //??
function test(){
    // 아무것도 안쓰면 자동으로 return이 들어감
} 
</script>

Untitled

<!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>

Untitled

💡 해결방법

<!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>