MDN scope:

https://developer.mozilla.org/en-US/docs/Glossary/Scope

! 변수는 최대한 필요한 곳에서 정의해야 함!

// 코드 블럭: { }, if() { }, for() { }, function() { }....

//블럭 외붕에서는 블럭 내부의 변수를 참조할 수 없음❌
{
    const a = 'a';
    console.log(a);
}
const b ='b';
// console.log(a); // a is not defined

//함수 외붕에서는 함수 내부의 변수를 참조할 수 없음❌
function print() {
    const message = 'Hellow World';
    console.log(message);
}
console.log(message); // 접근 불가

//함수 외붕에서는 함수 내부의 매개변수를 참조할 수 없음❌
function sum(a,b) {
    console.log(a,b);
}
console.log(a,b); // 접근 불가
{
    const x = 1;
    {
        const y = 2;
        console.log(x); // 1
    }
    console.log(x); // 1
    console.log(y); // app crash
}
const text = 'global'; // 전역 변수, 전역 스코프 (글로벌 변수, 글로벌 스코프)
{
    const text = 'inside block1'; // 지역 변수(로컬변수), 지역 스코프(로컬 스코프)
    {
        console.log(text); // inside block1
    }
}

const text = 'global';
{
    //const text = 'inside block1';
    {
        console.log(text); // global
    }
}

1) scope quiz

2) garbage collection

3) execution context

4) Hoisting

5) var👎

6) strict mode