일반적인 프로그래밍 언어에서의 함수 선언과 비슷한 형식이다
function name([param[, param,[..., param]]]) { [statements] }
function 함수명() {
구현 로직
}
hoisted(); // logs "foo"
function hoisted() {
console.log("foo");
}
유연한 자바스크립트 언어의 특징을 활용한 선언 방식
var myFunction = function [name]([param1[, param2[, ..., paramN]]]) { statements };
var 함수명 = function () {
구현 로직
};
함수 선언식은 호이스팅에 영향을 받지만, 함수 표현식은 호이스팅에 영향을 받지 않는다.
함수 선언식은 코드를 구현한 위치와 관계없이 자바스크립트의 특징인 호이스팅에 따라 브라우저가 자바스크립트를 해석할 때 맨 위로 끌어 올려진다.
호이스팅이란 모든 선언문이 해당 Scope의 최상위로 옮겨진 것처럼 동작하는 특성이다.
호이스팅을 설명할 땐 주로 "변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는" 것으로 말한다.
따라서 변수를 정의하는 코드보다 사용하는 코드가 앞서 등장할 수 있다.
다만 선언과 초기화를 함께 수행하는 경우, 선언 코드까지 실행해야 변수가 초기화된 상태가 된다.
함수 호이스팅이란 함수의 선언 위치와 상관없이 코드 내 어느 곳에서든 호출이 가능한 것이다.
변수 호이스팅이란 변수의 선언 위치와 상관없이 코드 내 어느 곳에서든 호출이 가능지만 초기화는 undefined다.