자바스크립트

Section 3. 자바스크립트 블록문과 스코프

포칼이 2023. 3. 23. 16:56

블록문이란?

{
  console.log('블록문');
}
  • 0개 이상의 statement들을 묶은 단위다.
  • 제어문, 함수 등에 사용된다.
  • 새로운 스코프를 생성한다.

그렇다면 스코프란? scope?

범위를 말한다. 일반적으로 변수를 어느 범위까지 쓸 수 있는가? 에대한 범위라고 생각하면 편하다.

{ //블록안에 선언된 변수와 상수를 밖에서 사용 불가
  const x = 'Hello';
  let y = 'world!';
  console.log(x, y);
}

console.log(x); //애러
console.log(y); //애러


let x = 1;

{//블록 안쪽에서는 바깥의 것 사용 가능
  let y = 2;
  console.log(x, y);
}
console.log(x);
console.log(y); //애러

추가로 블록 안쪽에 변수나 상수가 새로 선언되면 바깥 것을 덮어쓴다는점을 꼭 기억하자.

 

스코프체인이란? scope chain

어떤것이 들어와서 쌓이는걸 스택 stack 이라 한다. 

let a = 0;
let b = 1;
let c = 2;
console.log('시점 1:', a, b, c); //0 1 2

{
  let a = 'A';
  let b = 'B'
  console.log('시점 2:', a, b, c); //A B 2

  {
    let a = '가'
    console.log('시점 3:', a, b, c);// 가 B 2
  }

  console.log('시점 4:', a, b, c);// A B 2
}

console.log('시점 5:', a, b, c); // 0 1 2

블럭 안에 해당 변수/상수가 없으면 바깥쪽으로 찾아 나가는 것을 볼 수 있다. 이것을 체이닝 이라 하고 후입선출 즉, 나중에 온 것이 먼저 나가는 특성을 가지고 있다. 

 

마지막으로 메모리에서의 관점에서 살펴보자.

 

전역(global) 변수/ 상수  *전역변수 사용은 최소화하는 것이 좋다. 영향을 미치는 범위가 매우 넓기 때문이다. 

  • 데이터 영역에 위치
  • 코드 어느 곳에서듣 접근 가능
  • 프로그램 종료시 소멸

지역(local) 변수/상수 *변수나 상수는 가능한 사용할 블록 내에서 선언하는 것이 좋다. 메모리가 절약되기 때문이다. 

  • 스택 영역에 위치
  • 해당 블록 안에서만 접근 가능
  • 블록 실행 종료시 소멸