본문 바로가기
└ Java Script

[Java Script / jQuery] URL 파라미터 값 읽어오기-2, JavaScript 함수 구조

by 짜장이누나 2014. 4. 16.


2014/04/14 - [프로그래밍/Java Script] - [Java Script] URL 파라미터 값 읽어오기-1

두번째 방법은 더 간단하지만 java script 의 함수 사용법의 이해가 필요한 방법이다.

일단 URL 파라미터 값 읽어오는 방법에 대해 보자.


>> 소스보기


(function($) {
    $.QueryString = (function(a) {
        if (a == "") return {};
        var b = {};
        for (var i = 0; i < a.length; i++)
        {
            var p=a[i].split('='); 
            if (p.length != 2) continue;
            b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " ")); //공백으로 변환 후 디코딩
        }
        return b;
    })(window.location.search.substr(1).split('&')) //파라미터 정보만 분리
})(jQuery);



함수 호출 방법 ▼

2014/07/01 - [프로그래밍/Java Script] - [Java Script / jQuery] URL 파라미터 값 읽어오기-2 - 호출 방법




>> JavaScript 함수 구조

처음 저 함수 구조를 보고 음... 이거 어떻게 해석하지.. 라는 생각이 들었다.

일단, window.location.search.substr(1).split('&') 이부분이 먼저나와야하는데 뒤에나오네??

 function 앞에 왜 '(' 가 있는거지??

function 안에 function이 또있네??  무한루프인가?? 왜??

뒤에 '(jQuery)' 는 뭐지??

 

위에 구조를 쉽게 고쳐보면

  function() {

  var a = function() {


  }

  }


내부 함수를 실행하기 위해서는 a() 를 호출해야한다.

여기서 변수를 없애면 (function(){ })() 이렇게 되는 것이다.

이것을 이용해 위의 예제 함수를 다시 고쳐보면

  (function() {

  var a = (function() {


  })()

  })()


이렇게 되는 것이다.


그렇다면,

a()(a)() 의 차이점은 무엇일까?

두개의 차이점은 없고 모두 함수를 호출한다.


(a(a(a(a))))() 이것은 어떻게 호출될까?

결과를 먼저 보면 ,


어떻게해서 이런 결과가 나올까?

(a(a(a(a))))() 를 분해해보면

  var a1 = a()

  var a2 = a(a)

  var a3 = a(a2)

  var a4 = a(a()

  a4()

이런 구조인 것이다.




아하아하! 이제 좀 알겠다.

아직 갈길이 멀지만 점점  Java Script와 친해져가는거 같아 조으디조으디♪