-
[Javascript] 함수 선언문과 함수 표현식(function hoisting)Javascript 2021. 9. 23. 14:29
//함수 선언문 function add (x,y){ return x + y; } //함수 표현식 var add = function (x,y){ return x + y; }
함수 선언문의 경우 함수 호이스팅(function hoisitng)이 적용이 되어 코드의 최상단으로 끌려 올라간다.
런타임이전에 JS엔진에 의해 먼저 실핸되며 이는 런타임 이전에 함수 객체가 먼저 생성되는 것을 의미한다.
함수 표현식의 경우 함수 호이스팅이 아닌 변수 호이스팅이 적용되며 런타임에 함수 리터럴이 평가되어 함수 객체가 된다.
이둘의 차이는 무엇일까?
함수 선언문에 의해 생선된 함수 객체는 호이스팅으로 인해 최상단으로 올라갔기 때문에
함수가 선언되기 전에 함수를 호출하여도 에러가 나지 않는다
하지만 함수 표현식에 의해 생성된 함수를 생성이전에 호출 하게 되면 변수는 호출이 되었으나
함수 객체는 생성이 안되어 있기 때문에 undefined를 반환하게 된다.
'Javascript' 카테고리의 다른 글
[JS] HTMLCollection을 Array로 바꿔줘보자 (0) 2022.01.07 [Gulp, Tailwind] 사용하기 (초기세팅) (0) 2021.12.18 [Javascript] 원시값과 객체 (pass by value, pass by reference) (0) 2021.09.23 [Javascript] 단축평가 (0) 2021.09.23 [Javascript] throw new TypeError (0) 2021.09.23