Home > JavaScripFile
TITLE    자바스크립트 완벽가이드 4장 변수
작성자 김세라 날짜 2013.01.11 조회수 0

프로그램에서 쓰이는 데이터를 저장하고 다루는데 사용되는 것으로 c, c++, 자바나 기타타입 제약이 엄격하나 언어와 다르게 타입 네약이 엄격하지 않아 저장되는 자료의 타입이 자동으로 변환되는 특징이 있다.

[1. 변수의 선언]

var 키워드를 사용해 변수를 선언한다.



var i;

var sum;

var i, sum;

var message = "hello";



위와 같이 하나의 var에 여러개의 변수를 선언하거나, 변수의 선언과 초기화를 함께할 수도 있다.

선언만 하고 값을 초기화 해주지 않을 경우 값이 저장되기 전까지의 값은 undefined이다.

for나 for/in 루프에서 var문을 쓸 수도 있다. var문으로 선언된 변수는 영구적이다.

[2. 변수 선언의 반복과 생략]

var 구문으로 같은 이름의 변수를 여러번 선언해도 무방하다. 선언되지 않은 변수의 값을 읽으려 할 경우 에러가 발생한다. 그러나 만일 아직 var문으로 선언되지 않은 변수에 값을 할당하려 하면 자바스크립트가 암묵적으로 그 변수를 선언한다. 단, 암묵적으로 선언되는 변수는 항상 전역변수로 선언된다.

[3. 변수의 유효범휘]

함수 내부에서는 지역 변수가 같은 이름의 전역변수보다 우선적으로 사용된다. 같은 이름의 전역변수와 지역변수를 선언할 경우 지역변수 앞에는 꼭 var문을 사용해야 한다. 그렇지 않을 경우 아래와 같은 일이 발생.

scope = "global"; //전역변수 선언

function checkscope(){

scope = "local"; //전역변수의 값을 바꿈

document.write(scope); //바뀐 전역변수값 출력

myscope = "local"; //새로운 전역변수가 암묵적으로 선언

document.write(myscope); //새로 선언된 전역변수값 출력

}

checkscope(); //"locallocal"출력

document.write(scope); //"local"출력

document.write(myscope) //"local"출력





[4. 블록단위의 유효범위는 없다.]

블록단위 유효범위는 c,c++, 자바 등에 있는 것으로 자바스크립트에는 존재하지 않는다.

함수 안에서 정의된 변수는 그것이 정의된 위치에 관계없이 항상 함수 전체에 걸쳐 유효하다.



var scope = "global";

function f(){

alert(scope);

var scope = "local";

alert(scope);

}

f();

위 코드에서 함수 f내에 첫번째 alert은 "global"을 출력할것 같지만 아니다. 자바스크립트의 유효범위 규칙 때문이다. 지역 변수는 함수 전체에 걸쳐서 정의된다. 즉, 같은 이름의 전역 변수는 함수 전체에서 이 지역변수에 의해 감춰진다. 이 지역변수가 함수 전체에서 정의되어 있긴 하지만 var문이 실행되고 나서야 실체로 초기화 되므로 첫번째 alert에은 undefined이다. 위의 코드는 다음 코드와 마찬가지이다.

function f(){

var scope;

alert(scope);

scope = "local";

alert(scope);

}

[5. 정의되지 않은 변수의 종류]

정의되지 않은 변수의 서로 다른 두 가지의 종류를 살펴본다.

정의되지 않은 변수 VS 할당되지 않은 변수

- 아직 선언된 적이 없는 변수

선언되지 않은 변수를 읽으려 하면 런타임 에러가 발생한다. 하지만 값을 할당할 때는 암묵적으로 해당 변수가 유효범위로 선언되므로 에러가 발생하지 않는다.

- 선언은 되었으나 아직 값이 할당되지 않은 변수

이러한 변수를 읽으려 하면 그 변수의 초기값 undefined를 얻게 된다. 이 경우를 선언되지 않았기에 존재하지도 않는 경우와 구별하기 위해 할당되지 않은 변수로 부르기도 한다.

var x; //할당되지 않은 변수. 값은 undefined

alert(u); //선언되지 않은 변수. 에러 발생.

u = 3; //선언되지 않은 변수에 값을 할당하므로 전역변수 생성.

[6. 기본타입과 참조타입]

이번 챕터는 변수가 담고 있는 내용에 관한 것이다. 변수가 담고 있는 데이터에는 크게 기본타입과 참조타입 두 가지의 종류가 있다.

기본타입 : 숫자, 불리언값, null, undefined

참조타입 : 객체, 함수, 배열

기본타입은 고정된 크기의 메모리를 차지하고 참조타입은 데이터 값 자체가 아닌 그 값을 찾을 수 있는 위치를 변수에 제공한다.

두 타입의 작동방식은 서로 다르다. 다음의 예로 살펴보자.

var a = 3.14; //변수의 선언과 초기화

var b = a; //위 변수의 값을 새로운 변수에 복사

a = 4; //원래 변수의 값을 변경

alert(b); //3.14 출력. 복사본의 값은 바뀌지 않는다.



var a = [1, 2, 3]; //배열을 참조하도록 변수를 초기화

var b = a; //새로운 변수에 참조를 복사

a[0] = 99; //원래의 참조를 써서 배열을 변경

alert(b); //새로운 참조를 쓰지만 변경된 배열 [99, 2, 3]이 출력

기본타입과 참조타입을 구별하려면 변수의 데이터 타입이 무엇인지 항상 유념하면 된다. 기본타입에는 변수에 실제값이 저장되지만 참조타입은 단지 참조만이 저장된다.

[7. 가비지 컬렉션]

참조타입의 실제 데이터를 답고 있는 저장소에 관한 내용.

문자열, 객체, 배열 등은 크기가 정해져 있지 않으므로 이들을 담기 위한 저장소는 크기를 알 수 없는 상태에서 동적으로 할당돼야 한다. 이렇게 동적으로 할당된 메모리는 언젠가 반드시 해제되어 재활용될 수 있어야 한다. 자바스크립트 인터프리터는 어떤 객체가 어느 시점부터 프로그램에서 더이상 쓰이지 않는지 알아챌 수 있다. 어떤 객체에 더 이상 접근할 수 없다고 판명되면 할당했던 메모리를 회수한다.

[8. 전역객체]

자바스크립트 인터프리터가 구동되면 자바스크립트 코드를 실행하기 전에 먼저 수행하는 사전작업중 하나가 전역객체를 생성하는 일이다. 자바스크립트 전역변수를 선언하면 실제로는 전역객체의 프로퍼티가 정의된다.

최상위 코드에서 this 키워드를 사용해서 전역객체를 참조할 수 있다. 클라이언트측 자바스크립트에서는 브라우저 창에 표시되는 모든 자바스크립트 코드의 전역객체 역할을 window객체가 담당한다. window객체에서는 this대신 window객체 에서 자기자신을 참조하는 window프로퍼티를 사용할 수 있다. window객체는 parseInt와 Math등의 전역 프로퍼티들을 정의한다.

[9. 지역변수 : 호출객체]

전역 변수들이 특수한 전역객체들의 프로퍼티에 해당한다면 지역변수들은 호출 객체의 프로퍼티에 해당한다. 함수의 전달인자와 지역변수는 이 호출 객체의 속성으로 지정된다. 지역변수 용도로 전혀 별개의 객체를 사용하는 덕에 지연변수가 다른 이름의 전역 변수를 덮어쓰는 것을 방지할 수 있다.

[출처] 변수|작성자 김소쿨이

  • 김대근2013-01-11 14:43:34

    수고하셨어여 ^^

list
NO TITLE NAME DATE
6 자바스크립트 완벽가이드 7장 객체와배열 강춘희 2013.01.25
5 자바스크립트 완벽가이드 6장 문장 김대근 2013.01.24
4 자바스크립트 완벽가이드 5장표현식과 연산자 김원석 2013.01.24
3 자바스크립트 완벽가이드 4장 변수 김세라 2013.01.11
2 [자바스크립트 완벽가이드] 3장. 데이터 타입과 값 이승제 2012.12.27
1 과제를 올려주세요 관리자 2012.12.10
 1 
1