'변수 유효 범위'에 해당되는 글 1건

  1. 2012.08.09 자바스크립트 변수 유효 범위
728x90

자바나 , c등과 같은 언어에 비해 자바스크립트의 변수는 다른 언어들과 좀 달라서

저도 많이 혼동이 되는 부분입니다. 그래서 정리를해서 올립니다

 

var 문장

 

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

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

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

  false 리턴

 

변수 선언의 반복과 생략

 

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

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

 이때는, 전역변수로 생성된다(함수 내에서도 동일)

 

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

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

 

변수의 값이 undefined가 되는 경우

-아직 선언되지 않은 변수

이때 변수를 읽으려 하면 에러가 발생, 하지만 선언되지 않은 변수에 값을 집어넣으려 할땐 암묵적으로 전역변수로 선언된 후 값이 입력된다.

-선언은 되었으나 값을 초기화 하지 않은 경우

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

 

블록단위의 유효범위가 없다.

 

-함수에서 선언된 변수는 모두 해당 함수 전체에 걸쳐 정의되어 있다, (C나 JAVA 등과 같은 언어의 블록단위의 유효범위가 없다)

 

전역변수와 지역변수

 

-전역변수

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

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

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

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

 

-지역변수

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

자바스크립트에서는 지역변수용으로 전혀 별개의 객체를 사용하기 떄문에 지역변수가 같은 이름의 전역변수를 덮어 버리는 것을 방지 한다.

 

변수의 유효범위

 

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

자바스크립트 코드에서 scope 라는 변수의 값을 찾으려면 우선 첫번째 객체의 프로퍼티부터 검색한 후 있으면 이 값이 쓰이게 되고 이 객체에 없으면 다음 객체로 검색이 계속되고 마지막 전역 객체에도 없으면 이 변수의 값은 undefined 이다.

 

중첩되지 않은 함수라면 유효범위 체인은 호출객체와 전역객체로 이루어지며 호출 객체에서 프로퍼티를 검색한 후 없다면 전역객체를 검색한다.

 

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

 

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침