[스터디] 전역 변수의 문제점

김하은·2024년 1월 4일
0

스터디

목록 보기
14/23

주제 선정 이유

책을 읽으면서 의문점이 들었던 부분과 꼭 기억하고 싶은 부분들이 있어서 그 부분을 중점적으로 기록하기로 했습니다.


변수의 생명 주기

변수의 생명주기는 메모리 공간이 확보된 시점부터 멤모리 공간이 해제되어 가용 메모리 풀에 반환된는 시점까지로 지역 변수의 생명 주기는 함수의 생명 주기와 일치하고 전역 변수의 생명 주기는 애플리케이션의 생명 주기와 같습니다.

지역 변수의 생명 주기

❓지역 변수가 함수보다 오래 생존하는 경우도 있다.

  • 클로저: 함수가 선언될 때 해당 함수 내부에서 사용되는 변수가 외부에서 선언된 경우, 함수가 외부에서 선언된 변수를 기억하고 있다는 개념으로 이는 해당 함수가 생성될 때 주변 상황(스코프)을 기억하고 있어서 함수가 외부 변수를 계속해서 참조할 수 있게 함
function outerFunction() {
  let count = 0;

  function increment() {
    count++;
    console.log(count);
  }

  return increment;
}

const myIncrement = outerFunction();

myIncrement(); // 출력: 1
myIncrement(); // 출력: 2
  • 위 코드에서 outerFunctionincrement 함수를 반환함
  • outerFunction 내부에 있는 count 변수는 increment 함수가 생성될 때의 스코프를 기억하고 있기 때문에 increment 함수가 외부의 count 변수를 계속해서 참조할 수 있음
  • myIncrementouterFunction에서 반환된 increment 함수를 참조함
  • 이후 myIncrement 함수를 호출할 때마다 count가 증가하고, 콘솔에 값이 출력됨
  • 이때 count 변수는 outerFunction의 실행이 끝난 이후에도 유지되며, increment 함수의 스코프 내에서 계속해서 사용됨

❗호이스팅은 스코프를 단위로 동작한다.

var x = 'global';

function foo() {
  console.log(x); // undefined
  var x = 'local';
}

foo();
console.log(x); // global
  • foo 함수 내부에서 선언된 지역 변수는 console.log(x) 시점에 이미 선언되었고 undefined로 초기화되어 있음
  • 따라서 전역 변수 x를 참조하는 것이 아니라 지역 변수 x를 참조해 값을 출력함
  • 즉, 지역 변수는 함수 전체에서 유효함

참고 자료

  • 이웅모,『모던 자바스크립트 Deep Dive』, 위키북스(2021), p200-207.
  • ChatGPT
profile
아이디어와 구현을 좋아합니다!

0개의 댓글