본문 바로가기
js/작동방식

js hoisting

by 냉면돈가스 2022. 1. 14.

var

console.log(a);
a=4;
var a;

  위 코드상에선 a가 선언되지도 않아 에러가 나야하지만

  var를 이용하면 undefined 가 뜬다(변수는 선언됐단 뜻)

  변수를 어디에 선언하든 상관없이 끌어올려 선언시키는 hoisting이라는 것 때문에

  소스코드 첫 번째 줄에서도 a를 참조할 수 있다.

 

  hoisting으로 인해 편하게 소스를 작성할 수 있어서 좋아보이지만 

  단점도 확실히 존재함

 

  1. if문 내의 scope

    var는 let, const와 달리 if문에서 소스 코드를 작성할 시 전역변수와 같은 scope를 지님

    그래서 scope관리에 더 신경써야 한다.

 

  2. hoisting

    var는 let, const와 같이 hoisting이 되지만

    let, const는 TDZ 존 단계를 지니며 hoisting이 되지 않은 것처럼 보여진다.

    var는 완전하게 hoisting이 이루어져 소스코드의 어디서든 변수가 선언만 되어있다면 호출할 수 있다.

 

    이로 인해 소스코드 작성에 있어 난이도는 쉬워진다는 장점이 있지만,

    무분별한 작성으로 에러를 유발하기 쉽다.

 

    

TDZ

 

  TDZ란 "일시적 사각지대 존" 라고 불리며

  변수의 할당까지 (선언 > 초기화 > 할당) 단계가 있다면 선언과 초기화 단계 사이에 존재하여

  초기화되지 않은 변수들을 가지고 있다.

  즉 변수들의 초기화 상태 전, 사용을 막아준다. 

 

'js > 작동방식' 카테고리의 다른 글

node 비동기 작업의 실행원리 (process.nextTick)  (0) 2024.12.05
js 일급객체(함수)  (0) 2023.02.15
js 실행컨텍스트  (0) 2022.12.28
js node, npm, cli  (0) 2022.01.15

댓글