Scope(유효 범위)는 변수에 접근할 수 있는 '범위'를 뜻한다.

scope는 global scope(전역 범위)local scope(지역범위)로 나눌 수 있다.

//global scope를 가지는 변수 vscope
var vscope = "global";

function fscope() {
  //local scope를 가지는 변수 vscope
  var vscope = "local"
  console.log(vscope)
}

fscope();
console.log(vscope);

//local
//global
//global scope를 가지는 변수 vscope
var vscope = "global";

function fscope() {
  //var을 사용하지 않고 변수를 선언할 경우 global scope를 가지게 된다.
  //vscope의 값이 'global'에서 'local'로 변경된다.
  vscope = "local"
  console.log(vscope)
}

fscope();
console.log(vscope);

//local
//local

*자바스크립트의 지역변수는 함수에서만 유효하다. 즉, for문 혹은 if문과 같은 블록단위의 코드 내에서는 지역변수 선언이 불가하다.

==> 정확히는 var을 사용할 경우 함수에서만 유효하다. (함수 레벨 scope) 

*자바스크립트는 변수가 선언된 시점에서의 유효 범위를 갖는다.

==> 이러한 유효범위의 방식을 정적 유효범위(static scoping), 혹은 렉시컬(lexical scoping)이라고 한다.

 

ES6(ECMAScript6)이전, 모든 변수는 var을 이용하여 선언하였다.

var의 경우 여러가지 이유로 의도치 않게 그 값이 변할 수 있기 때문에 전역 변수의 사용을 지양하였다.

불가피하게 전역변수를 사용할 경우 전역 변수를 객체화시켜 객체의 속성으로 변수를 관리하는 방법을 권장하였다.

MYAPP = {}
MYAPP.calculator = {
    'left' : null,
    'right' : null
}
MYAPP.coordinate = {
    'left' : null,
    'right' : null
}
 
MYAPP.calculator.left = 10;
MYAPP.calculator.right = 20;
function sum(){
    return MYAPP.calculator.left + MYAPP.calculator.right;
}
console.log(sum());

//30

 

좋은 scopping 습관

global 변수가 여기저기서 수정되면 안 되기 때문에 변수들은 block scope으로 최대한 나눠놔야 한다.

타이트한 scope(tightly scoping)의 변수는 코드 품질을 올려준다.

  • 코드가 block으로 명확하게 구분되기 때문에 코드 가독성이 올라간다.
  • 코드가 한줄한줄 쭉 나열된 것이 아니라 각각의 기능별로 block을 나누면 코드가 이해하기 쉬워진다.
  • 나중에 코드를 수정할 일이 있을 때, 코드를 오랜만에 보더라도 잘 나뉘어 있어서 유지보수가 쉬워진다.
  • 프로그램이 끝날때까지 변수가 살아있는 것이 아니라서(block이 끝나면 local 변수의 삶이 끝나서) 메모리가 절약된다.

 

'개발 > Javascript' 카테고리의 다른 글

reduce  (0) 2021.01.24
var, let, const  (0) 2021.01.21
Hoisting  (0) 2021.01.20
charCodeAt, fromCharCode  (0) 2021.01.11
repeat  (0) 2021.01.11

+ Recent posts