본문 바로가기

공부중 :)/javascript

Javascript : 변수

반응형


Javascript : 변수





변수 (variable)

@ 변수란 어떤 값과 연관된 이름이다. 즉, 변수는 값을 저장하거나 포함한다.

// 'hello' 라는 값을 변수 str에 할당한다.
var str = 'hello';

//2라는 값을 변수 i에 할당한다.
var i = 2;

//위 i에 3을 더한 값을 새로운 변수 sum에 할당한다.
var sum = i + 3;
console.log(sum);   // 5




변수 선언

@ 자바스크립트 프로그램에서 어떤 변수를 사용하려면 일단 그 변수를 선언해야 한다.

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




변수의 유효 범위

@ 변수의 유효범위란 프로그램에서 그 변수가 정의되어 있는 영역을 말한다. 전역 변수의 유효범위는

   전역적이다. 즉, 그 변수는 자바스크립트 코드 전체에 결쳐 정의되어 있다. 반면, 어떤 함수 안에서 선언된

   변수는 오직 그 함수 몸체 안에서만 정의된다. 이런 변수를 지역 변수라 불리며, 유효 범위도 지역적이다.

   함수의 매개 변수 역시 지역변수이며, 함수 내부 에서만 정의된다.

   함수 내부에서는 지역 변수가 같은 이름의 전역 변수 보다 우선적으로 사용된다.

var scope = "global";   // 전역 변수 선언
function checkscope(){
   var scope = "local";   // 같은 이름의 지역 변수 선언
   console.log(scope);   // 전역 변수가 아닌 지역 변수가 사용된다.
}

checkscope();   // local

   전역 유효 범위에서 변수를 선언한다면 var 문을 생략해도 문제가 되지 않지만, 지역변수를

   선언하려면 반드시 var 문을 써야 한다.

scope = "global";   // var 문을 생략한 전역 변수 선언
function checkscope(){
   scope = "local";   // 함수 내에서 var 문을 생략하면 같은이름의 전역 변수 값이 바뀐다.
   console.log(scope);
}

checkscope();   // local

   자바스크립트에서는 블록 단위의 유효 범위라는 것이 존재 하지 않는다. 함수 안에서 정의된

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

var scope = "global";
function foo(){
   console.log(scope);   // 'global'이 아닌 'undefined'를 표시한다.
   var scope = "local";   // 변수는 이곳에서 초기화되었지만 함수 전체에 걸쳐 정의한다.
   console.log(scope);   // 'local'을 표시한다.
}

foo();   
// undefined
// local

   위 코드 foo 함수의 첫번째 console.log()에서 'global'이 출력될 것으로 오해할 수 있다.

   (나도 눈으로 코드만 읽었을 때는 그랬다.)

   하지만 자바스크립트의 유효범위규칙 때문에 실제로는 그렇지 않다. 지역변수는 함수 전체에

   걸쳐서 정의되기때문에 같은 이름의 전역 변수는 함수 전체에서 이 지역 변수에 의해 감춰진다.

   단, 이 지역 변수가 함수 전체에 정의되어 있기는 하지만, var 문이 실행되고 나서야 실제로 초기화

   된다. 따라서 위 코드의 함수 foo()는 아래 코드와 마찬가지이다.

function foo(){
   var scope;   // scope라는 이름의 지역 변수가 선언됨
   console.log(scope);   // scope 변수는 존재하지만 아직 'undefined' 값 이다.
   scope = "local";   // 이제 scope 변수가 초기화되고 값이 있다.
   console.log(scope);   // 'local'을 표시한다.
}

foo();   
// undefined
// local

   위의 예를 통해, 어떤 함수에서건 모든 변수의 선언을 함수의 시작부에 두는 것이 좋은

   프로그래밍 습관임을 알 수 있다.

   

   

   

반응형