1-1.let, const
function scope () { if (true) { const a = 123; console.log(a) // 값: 123 } } scope();
- 출력하는 변수
a
가 블록 레밸(유효 범위)안에 있기때문에 정상 출력된다.
function scope () { if (true) { const a = 123; } console.log(a) // ReferenceError } scope();
- 출력하는 변수
a
가 블록 레밸(유효 범위)밖에 있기때문에ReferenceError
가 출력된다.
function scope () { if (true) { console.log(a) // 값: undefined const a = 123; } } scope();
- 출력하는 변수
a
가 블록 레밸(유효 범위)안에 있지만 변수 선언하기전에 출력했기 때문에undefined
메시지가 출력된다.
1-2.var
function scope () { if (true) { var a = 123 } console.log(a) // 값: 123 } scope()
- 출력하는 변수
a
가 함수 레밸(유효 범위)안에 있기때문에 정상 출력된다.
function scope () { console.log(a) // 값: undefined if (true) { var a = 123 } } scope()
function scope () { if (true) { console.log(a) // 값: undefined var a = 123 } } scope()
- 출력하는 변수
a
가 함수 레밸(유효 범위)안에 있지만 변수 선언하기전에 출력했기 때문에undefined
메시지가 출력된다.