티스토리 뷰

IT/JavaScript

function(){} ();에서 ();의 의미

트래이닝맨 2012. 8. 10. 10:02
728x90
반응형

0.정의
()가 없냐 있느냐에 따라 호출하는 방식과 그것이 의미하는 것이 달라진다.

일단 ()의 의미를 간단하게 실행이라고 생각하고 아래의 예제를 보자.

1.()가 없는 경우

Source
var serial_maker = function(){
    var prefix=' ';
    var seq=0;
    return{
        set_prefix:function(p){
            prefix = String(p);
        },
        set_seq:function(s){
            seq = s;
        },
        gensym:function(){
                var result = prefix +seq;
                seq +=1;
                console.log(">>" + result);
                return result;
        }
    };
};
호출방법

var seqer = serial_maker();
seqer.set_prefix('Q');
seqer.set_seq(1000);
serial_maker().gensym();

의미

Source를 보면 function이 끝나는 부분에 ()가 없다. 그 의미는 "function을 정의만 한다." 이다.
그래서 호출하는 방법을 보면 "serial_maker().gensym()" 으로
     " 일단 serial_maker function을 한번 실행하고 function list를 리턴받고
      다시 한번 리턴 받은 function중 하나인 gensym을 실행한다."
 를 의미한다.

이것을 좀 더 의미 있게 해석을 하자면 이렇다.
function을 위와 같이 정의하고 실행을 하게 되면 매번 새로운 object가 생기게 되고 매번 변수의 값이 initial값으로 리셋된다는 것이다. 어떤 object를 계속 유지하며, 변수의 내용을 가져다 쓰려면 이 방식은 맞지 않는 것 같다(내 생각)

그리고 이 function은 외부에 호출이 되기 전까지는 undefinded로 유지된다.


2. () 가 있는 경우

Source

var serial_maker = function(){
    var prefix=' ';
    var seq=0;
    return{
        set_prefix:function(p){
            prefix = String(p);
        },
        set_seq:function(s){
            seq = s;
        },
        gensym:function(){
                var result = prefix +seq;
                seq +=1;
                console.log(">>" + result);
                return result;
        }
    };
}();
호출방법

serial_maker.gensym();

의미

Source를 보면 function이 끝나는 부분에 ()가 있다. 그 의미는 "function을 정의를 하고 실행을 해서 Return 값을 받는다." 이다.
그래서 호출하는 방법을 보면 "serial_maker.gensym()" 으로 
     " 이미 serial_maker function은 정의와 동시에 실행을 한 후에 function list를 리턴을 받은 상태이다.
       그래서 바로 리턴받은 function중 하나인 gensym을 실행한다."
 를 의미한다.

이것을 좀 더 의미 있게 해석을 하자면 이렇다.
function을 위와 같이 정의하고 실행을 하게 되면 처음에 정의될 때 만들어진 새로운 object가 계속 유지되게 된다.그러므로 내부  변수의 값이 다시 리셋되지 않고 유지된다. 따라서 
한 JSP page에서 이 function을 계속호출할 경우 seq +=1 때문에 숫자가 증가하는 것을 확인할 수 있다.

위로 미루어보아 당연한 이야기겠지만 이 function은 ()를 interpreter가 읽는 순간 undefinded에서 object가 생성된다.


반응형
댓글
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함