[펌] 자바스크립트 정리. 1 - 자바스크립트 변수
검색엔진을 뒤지면서 보다가 너무나 깔끔하게 정리된
자바스크립트가 있기에 퍼옴. 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 이다.
- 중첩되지 않은 함수라면, 유효범위 체인은 호출객체와 전역객체로 이루어지며, 호출객체에서
프로퍼티를 검색한 후 없다면 전역객체를 검색한다.
- 중첩된 함수인 경우 유효범위 체인은 여러개로 구성되며, 맨 안쪽의 중첩된 함수부터 검색하기
시작한다.