본문 바로가기
Development/Javascript

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

by Dev. Jkun 2013. 1. 21.
반응형

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

자바스크립트가 있기에 퍼옴. 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 이다.  

 

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

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

 

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

     시작한다.

반응형

댓글