호이스팅
코드가 실행되기 전에 자바스크립트 엔진이 선언해둔 변수를 미리 조사해서 메모리에 저장
함수가 실행되기전에 안에있는 변수들을 범위의 최상단에 올리는것
console.log(a)
var a = 1
console.log(a)
호이스팅시 변수의 선언과 초기화(undefined으로) 같이 시켜버림
console.log(a)
a = 1
var a
console.log(a)
둘다
undefined
1
출력
전역변수와 지역변수의 차이가 불분명함
for(var i = 1; i<5; i++){
console.log(i)
}
console.log(i)
1
2
3
4
5
변수이름이 같아도 허용함
var a = 1
console.log(a)
var a = 2
console.log(a)
1
2
console.log(a)
let a = 1
console.log(a)
ReferenceError: Cannot access 'a' before initialization
at Object. (C:\Strom\testInput.js:3:13)
a가 선언된 라인 전까지는 a에 접근할 수 없다.
a가 호이스팅으로 기억된건 알겠으나 a선언문이 나오기 전까지 너는 a에 접근 할 수 없어
Temporal Death Zone(TDZ)
일시적 사각지대
https://velog.io/@bathingape/JavaScript-var-let-const-%EC%B0%A8%EC%9D%B4%EC%A0%90
let name = 'bathingape'
console.log(name) // bathingape
let name = 'javascript'
console.log(name)
// Uncaught SyntaxError: Identifier 'name' has already been declared
name = 'react'
console.log(name) //react
var - 변수를 여러번 선언 할 수 있다. 같은 이름으로
let - 같은 이름으로 변수를 여러번 선언 할 수 없음, 대신 재할당 가능
const - 재선언, 재할당 모두 불가능
'자바스크립트' 카테고리의 다른 글
홀짝 맞추기 프로그램 (0) | 2021.11.08 |
---|---|
제어문 if / switch / 삼항 조건연산자 (0) | 2021.11.08 |
단위 변환 문제 (0) | 2021.11.08 |
packege.json 오류 (0) | 2021.11.08 |
시계의 각도 계산 (0) | 2021.11.08 |