안녕하세요송기석입니다.

 

   자바스크립트를 사용하면서 제대로 모르면서 쓰는 부분들을 깨우치고 있습니다. 일단 되는 것에 집중하다 보니 잘못 알고 잘못 사용하는 부분들이 많았습니다. 다시 말하면 강좌에서 엉터리 부분이 많다는 것입니다. 그래서 처음부터 엉터리인 부분의 강좌를 수정하고 있습니다. 한번에 하기 보다는 시간되는 되로 수정하고 잘못된 부분이 있으면 수정해서 잘못된 부분을 줄이겠습니다.

유효 범위(Scope)


오늘은 유효범위에 대하여 이야기 하겠습니다. 유효범위와 관계가 깊은 것은 var 키워드 입니다. var 없이 변수를 사용하면 전역변수이고 var 사용하면 지역변수라고 했습니다. 자바스크립트는 C언어와 다르게 블록 유효범위가 아닙니다. 다음은 함수 유효 범위를 보여 줍니다.


var test1 = function() {
  var a = 3, b = 5;
  
  var test1_1 = function() {
    var b = 7, c = 11;
    
    console.log('a : ' + a); // "a : 3"
    console.log('b : ' + b); // "b : 7"
    console.log('c : ' + c); // "c : 11"
    
  };
  
  test1_1();
  
  console.log('a : ' + a); // "a : 3"
  console.log('b : ' + b); // "b : 5"
  // console.log('c : ' + c); // ReferenceError: c is not defined
  
};

test1();

C언어의 블록 유효 범위와 다를 것이 없어 보이지만


var test2 = function() {
  var a = 3, b = 5;
  
  for (var i=0; i < 1; i++) {
    var b = 7, c = 11;
    
    console.log('a : ' + a); // "a : 3"
    console.log('b : ' + b); // "b : 7"
    console.log('c : ' + c); // "c : 11"
    
  };
  
  console.log('a : ' + a); // "a : 3"
  console.log('b : ' + b); // "b : 7"
  console.log('c : ' + c); // "c : 11"
  
};

test2();

이와 같이 블록에 영향을 받지 않음을 있습니다. 다음으로 전역변수에 대하여 이야기 하겠습니다이전에 전역변수를  사용해야 한다고 했는데  이유는 다음과 같습니다.


a = 10

var test3 = function() {
  
  console.log('a : ' + a);
  
  var a = 5;
  
};

test3(); // "a : undefined"

var test4 = function() {
  
  var a = 5;
  
  console.log('a : ' + a);
  
};

test4(); // "a : 5"

console.log('a : ' + a); // "a : 10"


아래와 위는 전역변수가 있는 상태에서 같은 이름으로 지역변수를 선언했을 경우 입니다. 지역변수를 사용할 블록영역에 영함을 받지 않는다고 해서 선언 위치를 test4경우처럼 사용하면 전역변수의 값도 지역변수의 값도 가져 없습니다. 전역 변수 이름을 구분해서 사용하고 지역 변수 선언할 상단 쓰는 것이 좋습니다.