해당 글은 '작성 중'이다.
선언문과 표현식을 구분하는 가장 쉬운 방법은 function
이라는 단어가 구문에서 어디에 위치하는가를 살펴보면 된다.
function
이 구문의 시작 위치에 있는 경우 → 함수 선언문var a = 2;
function foo() { // 함수 선언문
var a = 3;
console.log(a); // 3
}
foo();
console.log(a); // 2
var a = 2;
(function foo() { // 함수 표현식
var a = 3;
console.log(a); // 3
})();
console.log(a); // 2
함수 선언문과 함수 표현식의 중요한 차이는 함수 이름이 어느 스코프의 확인자로 묶이느냐와 관련이 있다.
즉, (function foo( ) {...})
라는 표현식에서 확인자 foo는 오직 ...
가 가리키는 스코프에서만 찾을 수 있고 바깥 스코프에서는 발견되지 않는다. 이로 인해 함수 이름 foo를 자기 내부에 숨기면 함수를 둘러싼 스코프를 불필요하게 오염시키지 않는다.