13장&14장 - 스코프, 전역변수의 문제점

Jaeseok0106·2022년 3월 17일
0

자바스크립트공부

목록 보기
9/14

모든 프로그래밍의 언어의 기본적이며 중요한 개념
모든 식별자는 자신을 참조할 수 있는 유효 범위가 결정이 되는데 이것을 스코프라고함.

전역 스코프 -> 코드의 가장 바깥 영역을 말함, 전역에서 선언된 변수는 전역 스코프를 갖는 전역 변수라고 부르며 어디서든 참조가 가능하다.

지역 스코프 -> 함수 몸체의 내부를 말함, 지역에서 선언된 변수는 지역 스코프를 갖는 지역 변수라고 부르며, 자신의 지역 스코프와 하위 지역에서 유효하다.

let x = "global x"; 
let y = "global y";

function outer()
{
  let z = "outer's local z"; // 여기서부터
  console.log(x); // global
  console.log(y); // global
  console.log(z); // outer's local z
  
  function inner()
  {
    var x = "inner's local x"; // 여기서부터
    
    console.log(x); // inner's local x
    console.log(y); // global y
    console.log(z); // outer's local z
    // 여기까지 지역 스코프
  }
  inner(); // 여기까지도 지역 스코프
}

outer();

console.log(x); // global x
console.log(z); // 참조 에러 발생, z is not defined
  • 스코프 체인
  1. 스코프가 계층적으로 연결된 것을 말한다.
  2. 자바스크립트는 변수를 참조하는 코드의 스코프에서 시작해 상위 스코프 방향으로 이동하며 변수를 검색한다. (ex = 지역 -> 지역 -> 전역 순)
  3. 내려가면서 식별자를 검색하지 않는 이유는 하위 스코프에서 유효한 변수를 상위 스코프에서 참조할 수 없기 때문이다.

변수에게는 생명 주기가 존재한다. 생명 주기가 없다면 메모리 공간에 변수가 영원히 할당되어있기 때문이다.
지역 변수의 주기는 함수의 생명 주기와 일치한다. 즉 함수가 호출되어 실행되는 동안에만 유효한 것이다. 그러나, 전역 변수의 생명 주기는 전역 객체의 생명 주기와 일치하는데 이는 즉 프로그램이 종료되기 전까지 유효하다는 이야기다.

  • 전역변수의 문제점
  1. 암묵적 결합 -> 모든 코드가 전역 변수를 참조하고 변경할 수 있어 코드의 가독성이 나빠지고 의도하지 않게 상태가 변경될 수 있는 위험성이 높아진다.

  2. 긴 생명 주기 -> 생명주기가 길어 메모리 리소스도 오랜 기간 사용하게 된다.

  3. 스코프 체인 상 종점에 존재 -> 스코프 체인의 맨 위에 있어 변수의 검색 속도가 가장 느리다.

  4. 네임스페이스 오염 -> 동일한 이름으로 생성된 전역 변수와 함수가 같은 스코프 내에서 존재할 수 있어 예상치 못한 결과를 가져오기도 한다.

0개의 댓글

관련 채용 정보