TIL -22. JavaScript : Scope

이지연·2020년 7월 27일
0
post-thumbnail

Scope란, 변수가 어디까지 쓰일 수 있는지의 범위를 의미한다.

문제를 풀다가 undefined라는 에러메시지가 많이 나왔었다.
그건 변수가 선언되지 않았다는 뜻인데, 선언을 하였어도 변수를 선언한 영역에(block) 접근할 수 가 없어서 컴퓨터가 변수가 선언되었다는 사실을 알지 못해 그런것이다.

변수에는 어느 위치에서든 쓸 수 있는 변수가 있고, 특정 부분(함수, for,if등)에서만 쓰일 수 있는 변수가 있다.

Block : 중괄호({}, curly brace)로 감싸진 부분

어떤 종류가 있냐하면?
function, if, for문 등이 있는데, 아래를 보면

function hi() {
  return 'i am block';
}

{}(block)로 감싸진 것을 볼 수 있다.function의 내부는 하나의 block이다.

  • {}내부에서 변수가 정의되면 변수는 오로지 {}내부에서만 사용 가능
  • {}내부에 정의된 변수를 local 변수라 한다.
  • {}이 끝나면 더 이상 변수가 살아있지 않고 쓸 수 없다.

Global(전역) Scope : block밖인 global scope에서 만든 변수

  • scope은 변수가 선언되고 사용할 수 있는 공간
  • scope 외부(block 밖)에서는 특정 scope의 변수에 접근할 수 없다.
  • 코드 어디서든 접근 가능해서 변수값을 확인 가능
  • 프로그램이 종료될 때까지 계속 살아있다.

Scope의 오염

global변수는 어디서든 접근하기 쉬워서 좋다. 하지만 장점이 있는 만큼 , 단점들이 있다.

global변수를 선언하면, 해당 프로그램의 어디에서나 사용할 수 있는 global namespace를 갖는다.

namespace : 변수 이름을 사용할 수 있는 범위라는 뜻

global변수는 프로그램이 종료될때까지 계속 살아잇어 변수값이 계속 변한다면 해당 변수를 트래킹 하기도 어렵고, 변수가 어디에서 왜 필요한지를 선언한 곳을 다 찾아 다녀야 한다.

그렇기 때문에 global변수를 남용하는 것을 주의해야한다.

어떻게 해야 좋을까?

  • global 변수가 여기저기서 수정되면 안되기 때문에 변수들은 block scope으로 최대한 나눠놔야 한다.
  • 또, 새로운 block에서 변수를 쓸 때는 항상 다른 이름으로 변수를 선언해야한다.
  • global 변수는 쓰지 않도록 노력하고 , 최대한 {}내에서 let, const을 사용하여 변수를 새로 만들자!
profile
Everyday STEP BY STEP

0개의 댓글