자바스크립트에서 함수는 원시 값이 아니지만 특별한 종류의 객체이고 이는 함수가 프로퍼티를 가질 수 있음을 의미한다
함수를 여러번 호출해도 유일한 값이 유지되어야 하는 정적 변수가 필요할 떄는 함수의 프로퍼티를 사용하는 것이 편리한 경우가 많다
uniqueInteger.counter = 0;
function uniqueInteger() {
return uniqueInteger.counter++;
}
자바스크립트는 함수 단위의 유효 범위를 갖는다
함수 내부에서 정의된 변수는 해당 함수 내부에서는 접근할 수 있지만 그 함수 바깥에는 존재할 수 없다
함수 밖에서 전역 변수이고 프로그램 전체에서 접근할 수 있다
이러한 성질을 이용하여 함수를 네임스페이스로써 사용할 수 있다
function myModule() {
// 모듈화할 코드들
// 전역 네임스페이스를 어지럽히지 않고 사용 가능
}
myModule() // 함수를 호출해야 사용 가능하다
이름 하나를 더 쓰는 것도 맘에 안들면 익명 함수로 사용 가능
(function () {
// 모듈 코드 작성
}())
가장 바깥의 괄호가 없으면 함수 선언식으로 오해하고
괄호를 쳐주면 표현식으로 이해한다는데..