스코프란?
- 식별자가 유효한 범위
- 선언된 위치에 따라 유효 범위가 결정됨
- {} 블럭안의 변수는 블럭 안에서만 유효
- 이름 충돌 방지, 메모리 절약
- 코드 블럭:
{ }, if() {}, for() {}, function() { }
{
const a = 'a';
}
console.log(a);
const b = 'b';
function print() {
const message = 'Hello World';
console.log(message);
}
console.log(message);
function sum(a, b) {
console.log(a, b);
}
console.log(a, b);
Garbage Collector(GC)
- 메모리가 부족할 때 쓰레기를 정리해주는 프로그램
- 어디서든 참조하고 있지않은 객체 삭제
const global = 1;
{
const local = 1;
}
function print() {
if (true) {
let temp = 0;
}
}
실행 컨텍스트 Execution Context
렉시컬 환경
- 환경 레코드 : 현재 블록에 해당하는 데이터
- 외부 환경 참조 : 외부 환경(부모 블록)에 대한 데이터
- 코드 실행 과정
- 필요한 변수와 함수를 "로컬 레코드"에서 검색
- 없으면 부모 레코드 ( 외부 렉시컬 환경 )에서 검색
- 글로벌 렉시컬 환경에도 없으면 Error 발생
- 찾으면 변수 사용
호이스팅
- 자바스크립트 엔진이 코드를 실행하기 전, 변수, 함수, 클래스의 선언문을 끌어 올리는 것을 말함
- 함수의 호이스팅은 함수의 선언문 전에 호출이 가능하게 해줌
- 변수의 선언과 초기화를 분리한 후, 선어만 코드의 최상단으로 옮김
print();
function print() {
console.log('Hello');
}
let hi = 'hi';
let func1 = function () {};
class Cat {}
let x = 1;
{
console.log(x);
let x = 2;
}