- [Javascript] 함수 선언문과 함수 표현식, 그리고 호이스팅2020년 01월 16일
- alpha brain
- 작성자
- 2020.01.16.:26
반응형자바스크립트에서 함수를 선언하는 방법은 2가지가 있다.
1. 함수 선언문
function myFunc(){ // do something... }
2. 함수 표현식
const myFunc2 = function(){ // do something... };
두 가지 표현 모두 다 호출하는 방식은 동일하다.
myFunc(); myFunc2();
두 선언방식의 차이점
함수 선언문은 이른바 호이스팅(hoisting)이라는 자바스크립트의 고유한 특성에 영향을 받는다.
호이스팅?
hoisting : 끌어 올리기; 들어올려 나르기. (네이버 영어사전)
호이스팅은 무언가를 끌어 올린다는 뜻이다.
자바스크립트에서 코드가 실행될때 의미상 특정 코드가 위로 끌어 올려지게 된다.
호이스팅을 변수 및 함수 선언이 물리적으로 작성한 코드의 상단으로 옮겨지는 것으로 가르치지만, 실제로는 그렇지 않습니다. 변수 및 함수 선언은 컴파일 단계에서 메모리에 저장되지만, 코드에서 입력한 위치와 정확히 일치한 곳에 있습니다. - mdn
코드는 위에서 아래로 실행된다.
그런데 코드가 위로 끌어 올려지게 되면?
당연히 그 코드부터 실행시킨다.
foo(); foo2(); function foo() { console.log('this is foo'); } const foo2 = function(){ console.log('this is foo2'); } // 함수를 선언도 하기전에 함수를 실행시키면 그 결과는 어떻게 될까?
함수 선언문으로 작성한 함수는 함수 호출보다 뒤에 있어도 실행이 되는것을 볼 수 있다. ( 'this is foo' )
반면 함수 선언문으로 작성한 함수는 참조에러가 나는것을 볼수가 있다.
나는 따로 호이스팅을 고려하지 않아도 되는 함수 표현식을 선호하는 편이다.
참고
반응형'SOFTWARE DEVELOP > JAVASCRIPT' 카테고리의 다른 글
[Javascript] 클로저(Closure) (0) 2020.01.20 [Javascript] 변수가 살아가는곳, scope (0) 2020.01.17 [Javascript] 값을 저장하는 방식, pass by value vs. pass by reference (0) 2020.01.15 [Javascript] 배열의 순회 메서드(Iteration methods) (0) 2020.01.15 [Javascript] 배열(Array)의 요소(element)조작 , 배열 메서드(method) (0) 2020.01.12 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)