하은양 믿음군 효실맘 호홍홍집s

자바스크립트에서 함수사용에 대한 좋은 설명 본문

가벼운 배움/javascript

자바스크립트에서 함수사용에 대한 좋은 설명

호홍홍집 2016. 5. 25. 18:54

참조 : http://www.nextree.co.kr/p4150/

함수와 익명함수

// 함수선언식(function declaration)
function company() {
    /* 실행코드 */
}

이와 같은 방식을 함수선언식(function declaration)이라고 합니다. 함수선언식으로 정의된 함수는 자바스크립트 인터프리터가 스크립트가 로딩되는 시점에 바로 초기화하고 이를 VO(variable object)에 저장합니다.  그렇기 때문에 함수 선언의 위치와는 상관없이 소스 내 어느 곳에서든지 호출이 가능합니다.

// 기명 함수표현식(named function expression)
var company = function company() {
    /* 실행코드 */
};
 
// 익명 함수표현식(anonymous function expression)
var company = function() {
    /* 실행코드 */
};
 
// 기명 즉시실행함수(named immediately-invoked function expression)
(function company() {
    /* 실행코드 */
}());
 
// 익명 즉시실행함수(immediately-invoked function expression)
// Javascript 대가이신 더글라스 클락포트의 권장 표기법
(function() {
    /* 실행코드 */
}());
 
// 익명 즉시실행함수(immediately-invoked function expression)
(function() {
    /* 실행코드 */
})();

이렇게 정의한 방식을 함수표현식(function expression)이라고 합니다. 함수가 변수에 할당되었으므로 “함수는 객체이다.”라는 정의가 가능합니다. 함수표현식은 함수선언식과는 달리 스크립트 로딩 시점에 VO에 함수를 저장하지 않고 runtime시에 해석되고 실행되므로 이 두가지를 구분하는 것은 중요합니다.

함수선언식으로 함수를 정의하면 사용하기에 쉽지만 대규모 애플리케이션을 개발하는 경우 인터프리터가 너무 많은 코드를 VO에 저장하므로 애플리케이션의 응답속도는 현저히 떨어질 수 있으므로 주의해야 할 필요가 있습니다. 참고로, 스크립트 파일을 모듈화하고 이를 필요한 시점에 비동기 방식으로 로딩하여 http 요청을 줄이고 응답속도와 사용자 체감속도를 향상시킬 수 있습니다