: 중괄호({})로 감싸져 있으며, block 내부에서 변수가 정의되면 오로지 block 내부에서만 사용할 수 있다(지역 변수).
: 함수를 생성할 때, 변수 및 함수 내 정의된 코드들은 그들만의 scope 안에 자리하게 된다. 즉, 다른 함수의 내부나 외부 함수의 코드가 접근할 수 없는 그들만의 구획에 갇혀 있다는 뜻이다.
global scope
: 함수 바깥에 선언된 가장 상위 레벨의 scope는 global scope(전역 scope). global scope 내에 정의된 값들은 어느 코드든 접근이 가능하다.
block scope
: 각각 다른 중괄호 {} 안에서 변수, 함수를 정의하면 중괄호 안에서만 이용 가능하고 각 블록이 독립적으로 실행된다.
[var와 let/const의 차이점]
var로 선언한 변수는 블록 범위를 가지지 않는다var x = 1; { var x = 2; } console.log(x); // 2
반면 let과 const로 선언한 식별자는 블록 범위를 가진다
let x = 1; { let x = 2; } console.log(x); // 1
const c = 1; { const c = 2; } console.log(c); // 1, SyntaxError 없음!
: 전역변수는 함수 외부에서 선언된 변수로, 프로그램 전체에서 접근할 수 있는 변수다.
: 지역변수는 함수 내부에서 선언된 변수로, 함수가 실행되면 만들어지고 함수가 종료되면 소멸하는 변수다. 함수 외부에서는 접근할 수 없다.
namespace
: 구분이 가능하도록 정해놓은 범위나 영역을 의미한다. 이름 그대로, 이름 공간을 선언하여 다른 공간과 구분하도록 하는 것이다.
: 하나의 전역 객체를 생성한 후, 모든 함수, 변수, 객체들을 그 전역 객체 안에 구현하는 방식
: 전역 변수의 개수를 줄이고, 같은 이름 충돌을 방지하며, 변수명이 불필요하게 길어짐을 방지한다.
: 하지만, 각 프로퍼티(변수, 객체 등) 상위 객체명을 계속 붙여야하므로 소스 양은 늘어난다.
global namespace
: global 변수를 선언하면, 해당프로그램의 어디에서나 사용할 수 있는 global namespace를 갖습니다.
: global 변수를 남용할 경우, global 변수는 프로그램이 종료될 때까지 계속 살아있어 변수값이 변하는 경우 트래킹 하기도 어렵고, 변수가 어디서 선언되었는지 찾기 어려워진다.
주의!) case문 안에 break문이 없으면 조건에 부합하는지 여부를 따지지 않고 이어지는 case문을 실행합니다.