블록 레벨 스코프: C, Java와 같이 함수 몸체 뿐만이 아닌 코드 블럭(조건문, 반복문) 등에서도 지역 스코프가 생성된다.
함수 레벨 스코프: 함수에서만 생성된다.
동적 스코프: 함수 호출에 따른 상위 스코프 결정
렉시컬 스코프: 함수 정의에 따른 상위 스코프 결정
var의 문제점: 코드 블럭에서 지역 스코프가 존재하지 않아 중복 선언하는 경우가 잦고, 중복 선언에 따른 에러가 발생하지 않는 점
전역 변수
변수 호이스팅 재개념: 선언된 스코프가 실행될 때, 선언된 스코프의 선두로 올려진 것 처럼 동작하는 것.
변수 생명주기: 함수의 몸체가 실행될 때 생성 함수가 종료될 때 소멸
전역 객체
var | let, const | |
---|---|---|
변수 중복 선언허용 | O | O |
스코프 | 함수 레벨 스코프 | 블록 레벨 스코프 |
let의 변수 호이스팅: 호이스팅에 의해 선언단계는 먼저 실행되지만, 초기화 단계는 선언문에 도착했을 때 실행된다.
const
일반적으로 const를 사용한다
재할당이 필요한 경우 let을 사용한다. (스코프는 최대한 좁게 생성한다.)