자바스크립트에서 함수라는 녀석은 참 재미있는 녀석입니다.
특별하진 않지만 에러를 발생시킬 위험이 있는 녀석이죠.
함수를 선언하는 방식은 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가 호출됩니다.
'프로그래밍 > JavaScript' 카테고리의 다른 글
[JavaScript] new 키워드를 사용한 생성자 (0) | 2018.11.18 |
---|---|
[javaScript] 자기호출 익명함수란? (0) | 2018.11.16 |