Development/Javascript

[펌] 자바스크립트 정리. 1 - 자바스크립트 변수

Dev. Jkun 2013. 1. 21. 09:22
반응형

검색엔진을 뒤지면서 보다가 너무나 깔끔하게 정리된

자바스크립트가 있기에 퍼옴. GENERAL 님의 정리 감사합니다.

댓글은 아래 링크(블로그)에 달아주시기 바랍니다. 저도 고맙게 생각하는 지라


링크 : http://blog.naver.com/minis24/80094251902


* 자바스크립트를 공부하면서 노트에 정리해 놓은 내용을 보기 편하고, 효율적으로 검색하기 위해

  블로그에 올리고 있습니다.

* 괜찮게 생각했던 내용과 메서드나,프로퍼티등의 인덱스가 있었으면 해서 정리한 거라서

   아주 기초적인 내용은 없을지도 모르겠네요. ^^ 

* 오늘은 자바스크립트 변수와 관련된 내용입니다.

 

 

 

자바스크립트의 변수는 자바에서의 변수와 상당히 다르죠. 첨엔 무척 혼동이 되었는데요.

한번에 정리를 해서 보니 이해가 가더군요.

아래의 내용만 이해하면 스크립팅 할 때나, 디버깅 할때 에러의 발생지점을 아마도 잘 찾을수 있을꺼에요.....

 

 

* var 문장

   - 함수 내부에서 사용되면 해당 함수의 호출객체에 프로퍼티를 생성함으로서 변수를 정의한다.

   - 만일 함수의 몸체 내부가 아니라면 전역 객체에 프로퍼티를 생성한다.

   - var 문으로 명시적으로 생성되는 변수(프로퍼티)는 delete 연산자로 삭제할 수 없다.

      false 리턴

 

* 변수 선언의 반복과 생략

   - 선언되지 않은 변수의 값을 읽으려 하면 에러 발생

   - var 로 선언하지 않은 변수에 값을 할당하려 하면 자바스크립트가 암묵적으로 변수를 선언한다.

      이 때, 전역변수로 생성된다.(함수내에서도 마찬가지임).

 

* 함수내에서는 지역변수가 같은이름의 전역변수보다 우선한다.

     (유효범위 체인의 앞단계에 해당 변수가 없을경우, 전역객체에서 검색한다.)

 

* 변수의 값이 undefined 가 되는 두가지 경우

    - 아직 선언되지 않은 변수

        이때 변수를 읽으려 하면 런타임 에러가 발생한다.

        하지면 선언되지 않는 변수에 값을 집어넣으려 할땐 암묵적으로 전역변수로 선언된후

        값이 입력된다.

    - 선언은 되었으나 , 아직 값이 할당되지 않은 경우

         이때 변수를 읽으려 하면 변수의 초기값인 "undefined" 가 출력된다.

 

* 블록단위의 유효범위는 없다.

     for(var i = 0 ;....... ;......){

         ....

     }

     이때 i 는 for 문 밖에서도 이미 정의 되어 있다.

    

    

    - 함수에서 선언된 변수는 모두 해당 함수 전체에 걸쳐 정의되어 있다.

    

    var scope = "global"; 

    function f(){

        alert(scope) ;          // undefined  출력     

            // scope 는 함수내에서 지역변수로 선언되었다. 이경우 전역객체보다 우선하므로

            // 선언되었으나 값이 할당되지는 않았으므로 이러한 결과 출력됨.

        var scope = "local";

        alert(scope);          // "local" 출력 

   }

   f();                            // 함수 실행

 

* 전역변수와 지역변수

   - 전역 변수 :

       자바스크립트 인터프리터가 구동되면, 자바스크립트 코드를 실행하기전, 전역객체를 생성한다.

       이 전역객체의 프로퍼티는 자바스크립트 프로그램의 전역변수 들이다.

       전역변수를 선언하면 실제로는 전역객체의 프로퍼티가 된다.

     

       ※ 클라이언트측 자바스크립트에서는 Window 객체가 전역객체가 된다.

           Document 객체 --> HTML 문서

           Window 객체    --> 브라우저창 or 프레임 

 

       최상위 코드(어떤 함수에도 속하지 않는 코드)에서는 자바스크립트의 this 키워드로 전역객체를

       참조할 수 있다.

       즉 전역객체인 Window객체는 this 키워드 또는 window 프로퍼티로 접근한다.

 

  - 지역변수 :

        지역변수도 어떤 객체의 프로퍼티에 해당하며, 이 어떤 객체를 호출객체라 한다.

        자바스크립트에서는 지역변수용으로 전혀 별개의 객체를 사용하기 때문에 지역변수가

        같은 이름의 전역변수를 덮어 버리는 것을 방지한다.

 

* 자바스크립트 실행 컨텍스트

   - 자바스크립트 인터프리터는 어떤 함수를 실행할때마다, 그 함수에 대한 새로운 실행 컨텍스트를

      생성한다.

  

   - 모든 자바스크립트 함수는 각기 자신만의 고유한 컨텍스트에서 실행되며,

     이 컨텍스트에 지역변수가 정의되어 있는 호출 객체가 있다.

   

   - 최상위 코드를 실행하는 컨텍스트에서는 전역객체를 사용해서 변수를 정의한다.

  

   - 복수의 전역객체,복수의 실행컨텍스트를 허락하기도 한다.

      ex) 각각의 브라우저창,창 내부의 프레임들 마다 개별적인 전역 실행 컨텍스트가 있다.

            각각의 프레임들은 자신만의 실행 컨텍스트에서 코드를 실행하며, 자신만의 전역객체를

            가지고 있다.

   - 클라이언트측 전역객체에는 다른 전역객체를 연결하는 프로퍼티가 있다.

      ex) parent.frames[i]

           한 프레임의 자바스크립트 코드에서 다른 프레임을 참조하는 것이 가능하며,

           단일 자바스크립트 인터프리터로 서로 다른 전역 실행 컨텍스트의 스크립트를 실행하는것도

           가능하다. (동일출처정책에 위배되지 않는 범위에서 가능함)

 

   - 여러개의 창(또는 프레임) 사용하는 애플리케이션을 만들수 있으며 각창(또는 프레임)은 고유한

      window 객체를 갖는다.

      window 객체는 고유한 실행컨텍스트를 정의한다. 즉, 한 창의 전역변수는 다른창에서는

      전역변수가 아니다.

  

* 변수의 유효범위

   - 모든 자바스크립트 실행 컨텍스트에는 유효 범위 체인이란 것이 있는데 이는 객체들의 나열이다.

      자바스크립트 코드에서 scope 라는 변수의 값을 찾으려면, 우선 첫번째 객체의 프로퍼티부터

      검색한다. 첫번째 객체에 scope 라는 프로퍼티가 있으면 이 값이 쓰이게 된다.

      이 객체에 scope 라는 프로퍼티가 없으면 다음 객체로 검색이 계속된다. 

      마지막으로 전역객체에도 이 프로퍼티가 없으면, 이 변수의 값은 undefined 이다.  

 

   - 중첩되지 않은 함수라면, 유효범위 체인은 호출객체와 전역객체로 이루어지며, 호출객체에서

     프로퍼티를 검색한 후 없다면 전역객체를 검색한다.

 

   - 중첩된 함수인 경우 유효범위 체인은 여러개로 구성되며, 맨 안쪽의 중첩된 함수부터 검색하기

     시작한다.

반응형