본문으로 바로가기



자바스크립트에서 함수라는 녀석은 참 재미있는 녀석입니다.

특별하진 않지만 에러를 발생시킬 위험이 있는 녀석이죠.


함수를 선언하는 방식은 2가지가 있습니다.


-선언적 함수 

 function temp() {};

-익명 함수

 var temp = function() {};


두 함수의 사용법에 큰 차이는 없지만 호출되는 순서가 다르기 때문에 가끔 혼란이 올수 있습니다.

 

두 방식의 차이를 알기 위해서는 호이스팅(hoisting) 방식을 알아야 합니다.

호이스팅(hoisting)이란 인터프리터 자바스크립트를 해석하게 될때 전역(Global)영역의 선언된 코드를 최상의 Scope로 끌어올리는것을 말합니다.


자바스크립트 엔진은 전역영역에 코드를 먼저 해석하게 됩니다. 할당구문(=)은 런타임이 이루어지기 때문에 늦게 해석이 됩니다.

그렇기 때문에 선언적 함수가 먼저 다음 익명 함수가 호출되게 됩니다.


<예제>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <script>   
      
       //익명 함수
       var ExamFunction = function()                        
       { 
           alert("A");
       }
       
       //선언적 함수
       function ExamFunction()
       {
           alert("B");
       }
       
       ExamFunction();
      
       
   </script>
</body>
</html>
cs



<결과>


:   A


익명함수가 먼저 생성되고 선언적함수가 늦게 생성되기 때문에

늦게 생성된놈이 덮어씌워 버리기 때문에 A가 호출됩니다.