바깥쪽 Scope 에서 안쪽 변수/함수를 접근하는 것은 불가능
✓ Scope는 중첩이 가능하다(함수안에 함수를 넣을수 있다.)
✓Global Scope 는 최상단의 Scope로, 전역 변수는 어디서든 접근이 가능하다.
✓지역 변수는 함수 내에서 전역 변수보다 더 높은 우선순위를 가진다.
Rule 2 : Function Scope vs. Block Scope
- Block :중괄호로 시작하고, 끝나는 단위
✓중괄호 범위에서 벗어나면 변수를 사용할수 없게된다.
✓✓✓ var 키워드 vs let 키워드
JabaScript 는 기본적으로, 함수단위로 자신만의 Scope를 가집니다 → var키워드(old way)
그러나, Block 단위로 Scope를 구분했을 때에 예측하기 쉬운 코드를 작성할 수 있다.→let 키워드
✓✓✓const :값이 변하지 않는 변수, 즉 상수를 정의할 때 사용하는 키워드
let 키워드와 동일하게 Block Scope를 따른다.
값을 재정의하려고 하면 TypeError를 냅니다.
Rule 3 : 전역 변수와 window 객체
-Window : 전역 범위를 대표하는 객체
Global Scope에서 선언된 함수, 그리고 var 키워드를 이용해 선언된 변수는 window 객체와 연결
✓ 전역 범위에 너무 많은 변수를 선언하지 않도록 한다!
Rule 3 : 선언 없이 초기화된 전역 변수
🚫 절대로, 선언 키워드 없이 변수를 초기화하지 마세요!
여기서 age는 window.age 랑 같은 값이 된다. 즉 전역변수로 취급이된다.(age===window.age) 그래서 scope 밖에서 사용할수 있다.
이런것을 방지하고자 맨앞에 'use strict'를 사용하여 문법적으로 실수할 수 있는 부분들을 에러로 판단해준다.