function hasValue (p) {
console.log(v) //undefined
if (p) {
var v = 'blue'
console.log(v) //'blue'
} else {
var v = 'red'
console.log(v)
}
//#1
console.log(v) //'blue'
}
hasValue(10)
function hasValue (p) {
console.log(v)// undefined
if (p) {
let v = 'blue'
console.log(v)// 'blue'
} else {
let v = 'red'
console.log(v)
}
//#2
console.log(v)// undefined
}
hasValue(10)
위의 두개의 코드는 각각 변수를 var와 let으로 정해준 차이밖에 없다. 그러나 출력되는 결과값을 서로다르다. 이유가 무엇일까?
결과를 먼저 말하자면 var는 블록스코프의 영향을 받지 않는다. 반면에 let은 블록스코프의 영향을 받는다.
블록스코프에 관한 자료: https://velog.io/@minho100227/Block-Scope
결과적으로 #1에서는 블록스코프의 영향을 받지않으므로 위의 if문에서 정해준 v의 값이 이어져 'blue'를 출력하지만 #2에서는 블록스코프에 의해 함수 밖에 있으므로 undefined를 출력한다.