let
Block 스코프 안에서만 유효
// 괄호안에서만 유효
글로벌 객체에 입력되지 않는다.
호이스팅된다.
//엑세스는 불가능
const
let과 동일하나 재할당 불가
-------스코프
var => function scoped 함수 레벨 스코프
함수의 코드 블록만을 스코프로 인정
// 코드 블록 내의 변수는 전역변수
ex) { var nathan = 123; }
console.log(nathan); // 123
함수 내 선언된 변수 => 함수 내에서만 유효
함수 외부에선 참조 불가 => 지역변수
전역함수 외부에서 생성한 변수 => 전역변수
//전역 변수를 남발할 가능성 높다
//주의해서 사용
let, const => block scoped 블록 레벨 스코프
값이 스코프 안에 있을때만 유효하다
// 코드 블록 (함수 ,if, for 등등) 내에서만 유효
// 코드 블록 외부에서 참조 불가
코드블록 내부 선언 => 지역변수
-------호이스팅
변수의 스코프는 좁을수록 좋다
var => function-scoped로 hoisting
let, const => block-scoped단위로 hoisting
호이스팅으로 인해 ReferenceError에러가 안난다.
ex)
console.log(b)// undefined
var b;
- 변수 생성 단계
선언 => 초기화 => 할당
var : 선언, 초기화 한번에 이루어짐
let : 선언, 초기화 분리되어 이루어짐
// 스코프에 변수 등록 (선언) 은 한다
// 초기화는 변수 선언문에 이루어짐
스코프의 시작 지점부터 초기화 지점까지는 변수 참조 불가
이 구간 => 일시적 사각지대 (Temporal Dead Zone; TDZ)
------- 변수 중복 선언
var
이미 만들어진 변수로 재 선언 가능
// 의도치 않은 변수값 변경 일어날 수도 있다
ex) var a ="거북"
var a = "파이리"
let, const 장점
변수 재선언 불가능
// let => 재할당은 가능
const => 재할당 불가
// 선언과 동시에 값 할당해야 함
----------
let 전역변수 사용 => window 객체로 등록 안됨
// 보이지 않는 개념적인 블록 내에 존재
보기
https://poiemaweb.com/es6-block-scope
IIFE
tdz(temporal dead zone)
일시적 사각지대(Temporal Dead Zone; TDZ)
'JavaScript' 카테고리의 다른 글
OOP, Encapsulation, Abstraction, factory function, Inheritance (0) | 2020.01.08 |
---|---|
ES2015 , ES6 (0) | 2019.11.18 |
event delegation, 버블링, 캡쳐링 (0) | 2019.10.12 |
HTTP, JSON ,AJAX (0) | 2019.10.04 |
Prototype, instance , __proto__, Prototype Chain (0) | 2019.09.23 |