var, let, const

minho·2021년 12월 12일
0
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를 출력한다.

블록스코프는 let과 const에 대해서만 동작한다!

profile
Live the way you think

0개의 댓글