• 자바스크립트 변수(var,let,const)
  • 호이스팅(Hoisting)


  • 자바스크립트에서는 변수를 선언할 때 3가지 방법이 존재한다.
  • var, let, const 세가지의 차이점을 알아보려한다.
  • 일반적으로 var는 ES6이전의 문법이고, let과 constsms ES6의 문법이다.
  • 여기서 ECMA스크립트(ECMAScript, 또는 ES)는 Ecma 인터내셔널의 ECMA-262 기술 규격에 정의된 표준화된 스크립트 프로그래밍 언어이다.
  • ES6(ECMAScript6)란 결국엔 자바스크립트 언어의 표준 규격을 의미한다고 생각하면 된다.
  • ES6(ES2015): ECMAScript205이며 규격 발행은 2015년도이다.
  • 더 자세한 설명은 위키-ECMA스크립트를 참고!


var

  • 변수 선언 방식에서 변수를 한번 더 선언하면 다른 값이 나온다.
      var name = 'bokyeong' 
      console.log(name) //bokyeong
      var name = 'bokyeoning' 
      console.log(name) //bokyeoning
    


let

  • 변수 재선언 불가능, 재할당 가능
      let name = 'bokyeong' 
      console.log(name) //bokyeong
      let name = 'bokyeoning' 
      console.log(name) //error
      name = 'bokyeoning'
      console.log(name) //bokyeoning
    


const

  • 변수 재선언, 재할당 모두 불가능
      const name = 'bokyeong' 
      console.log(name) //bokyeong
      const name = 'bokyeoning' 
      console.log(name) //error
      name = 'bokyeoning'
      console.log(name) //error
    


자바스크립트 특징

  • 변수, 함수를 나중에 정의하더라도 즉시 사용할 수 있다
  • 자바스크립트의 이러한 특징을 호이스팅이라고 한다.


변수 호이스팅

  • var로 정의된 변수나 함수의 선언문이 유효범위의 최상단으로 끌어올려지는 것
  • 변수의 정의가 그 범위에 따라 선언과 할당으로 분리되는 것
  • 변수가 함수 내부에 작성이 되었다면, 함수 내부의 최상위에서 선언된 것과 같고, 변수가 함수 외부에 작성이 되었다면, 전역 컨텍스트의 최상위에서 선언된 것과 같음
  • 함수 내부/외부 어떤 경우라도, 변수가 선언만 된 것이고 할당된 것은 아님

size_main

  • 다른 언어에서는 temp를 선언하지않고 출력을 한다면 에러가 날테지만, 자바스크립트의 경우에는 정의되지않았다는 undefined가 선언된다.
  • undefined 였던 변수에 값을 할당한 뒤 출력하면 할당한 값이 저장되어있는 것을 확인할 수 있다.