230318_TIL

·2023년 3월 18일
0

Scope

범위, 영역을 뜻한다.
프로그래밍에서의 Scope = 변수를 참조할 수 있는(== 접근할 수 있는)
유효한 범위
OR 식별자(변수, 함수, 클래스)가 유효한 범위

  • 선언된 위치에 따라 유효 범위가 결정된다.
  • 블럭 안의 변수는 블럭 안에서만 유효 {}

즉, 식별자(변수)는 최대한 필요한 곳에서 정의해야 한다.

Scope는 왜 존재하는가?

  • 식별자들의 이름 충돌 방지
  • 블럭안에서 함수가 끝나면, 메모리에서 삭제. => 메모리 절약

예시

// 코드 블럭 : {}, if() {}, for() {}, function() {}
// 블럭 외부에서는 블럭 내부의 변수를 참조할 수 없다. ❌
{
  const a = "a";
  console.log(" a : ", a);
}

const b = "b";
// console.log(" a : ", a);

코드 블럭 안에서는 제대로 a가 출력된다.

// 함수 외부에서는 함수 내부의 변수를 참조할 수 없다. ❌
function print() {
  const message = "Hello World";
  console.log(" message : ", message);
}
// console.log(" message : ", message); 함수 안에서 선언된 변수는 함수 스코프 안에서만 참조가능.
print();

// 함수 외부에서는 함수 내부의 변수를 참조할 수 없다. ❌
function sum(a, b) {
  console.log(" a,b : ", a, b);
}
// console.log(" a,b : ", a, b); 매개변수도 함수 scope 안에서만 참조가능.



하지만 블럭 바깥에서 실행한 console에서는 아래 참조에러가 뜨게 된다.
**ReferenceError: a is not defined**

Scope 참조 예제

{
  const x = 1;
  {
    const y = 2;
    console.log(" x : ", x); // 상위 스코프 변수에 참조가능. 변수 x = 1
  }
  console.log(" x : ", x); // 같은 스코프 변수 참조가능. 변수 x = 1
  // console.log(" y : ", y); // 하위 스코프 변수는 참조 불가능. (== 밖에서는 내부 변수 참조 불가!!!) Error
}

const text = "global"; // 전역 변수, 전역 스코프 (글로벌 변수,글로벌 스코프)
{
  const text = "inside block 1"; // 지역 변수(로컬 변수), 지역 스코프(로컬 스코프)
  {
    // const text = "inside block 2"; 만약에 해당 변수가 활성화 상태라면, inside block 2가 출력될 것임. (가장 가까운 스코프이기 때문)
    console.log(" text : ", text); // 상위 스코프 변수에 참조가능. inside block 1 출력.
  }
}

Garbage Collector

자바스크립트 엔진 백그라운드 프로세스

왜 존재하는가?

  • 어떤 값이 있는 메모리에 참조하는 변수가 아무것도 없을 때, 자바스크립트 백그라운드에서 메모리 최적화를 위해 실행되는 프로세스이다.
  • cpu를 위해 불필요한 메모리를 너무 많이 할당하거나, 재할당하지 않는 것이 중요하다.

정리

// 자바스크립트 엔진 백그라운드 프로세스

// 변수는 글로벌하게 쓰는 것 보다 필요한 곳에서 쓰는 것이 좋다.
// 블럭 안, 클래스 안, 함수 안, 모듈 안, 조건문 안에서 등

// 글로벌 변수는 앱이 종료될때까지 계속 메모리에 유지된다.
const global = 1;
{
  //블럭 내부에서만 존재하고, 블럭이 끝나면 자동으로 소멸된다. (GC)
  const local = 1;
}

function print() {
  // 함수 내부에서도 블럭안에서 필요한 경우에는
  // (필요한 곳에서!) 블럭 안에서 변수를 선언하고 사용해야 한다.
  if (true) {
    let temp = 0;
  }
}

0개의 댓글