새소식

Frontend/JavaScript

[JavaScript] let, const, var 차이 + 호이스팅 개념 정리

  • -

 

 

 

 

  • 자바스크립트는 기본적으로 함수 레벨 스코프를 따름
  • 모든 선언(var, let, const, function, class)를 호이스팅함
  • 호이스팅
  • 변수를 선언하기 전에 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당
  • var 선언문이나 function 선언문 등을 해당 스코프의 선두로 옮긴 것처럼 동작하는 특성
  • 변수의 선언과 할당을 분리해서 선언 부분을 스코프의 가장 위쪽으로 끌어올림
  • 초기화를 제외한 선언만 호이스팅

 

 

블록레벨 → let, var, const 다시 정리 → 함수 스코프, 블록 스코프

 

  • const, let → block scope

굳이 함수로 작성 안 해도 됨

 

  • var → function scope

 

전체 문서: 전역 변수(global scope)

함수, 변수: 지역 변수(local scope)

 

 

지역 변수(local scope) -> 함수, 블록

 

함수 범위(function scope)

  • 함수 안에서 변수가 선언되면 함수 안에서만 사용 가능
  • 함수 외부에서 선언한 변수는 모두 전역 변수

 

블록 범위(block scope)

  • if, switch, for, while문, try/catch문 등 안에서 선언됐으면 그 안에서만 가능
  • { 중괄호 안에서 선언된 변수 }

 

for 루프의 i

  • for loop 안에서만 사용 가능한 지역 변수
  • i는 자유변수. for 루프의 생명 주기가 종료되어도 변수 i를 참조하는 함수가 있으면 계속 유지됨

for (let i = 0; i < 3; i++) {

console.log(i);

}

 

전역 객체(global object)

  • 모든 객체의 유일한 최상위 객체
  • browser-side: window 객체
  • server-side(node.js): global 객체

 

변수 생성 과정 

선언 - 초기화 - 할당

var: 선언-초기화(동시에 실행) -> 할당

let: 선언 - 초기화 - 할당

 

let foo = 1; // 전역 변수

 

{

  console.log(foo); // ReferenceError: foo is not defined

  let foo = 2; // 지역 변수

}

 

let foo = 1;

 

{

  // 호이스팅 과정

  // 스코프의 선두 부분: 선언단계(스코프에 변수 등록)

  // 일시적 사각지대(TDZ)

  console.log(foo) // ReferenceError

  let foo; // 초기화

  foo = 2; // 할당

}

 


 

 

참고 자료

 

Function Scope & Block Scope in JS

Var vs Let vs Const

medium.com

 

호이스팅 - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN

JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다

developer.mozilla.org

 

let, const | PoiemaWeb

ES5까지 변수를 선언할 수 있는 유일한 방법은 var 키워드를 사용하는 것이었다. var 키워드로 선언된 변수는 아래와 같은 특징이 있다. 이는 다른 언어와는 다른 특징으로 주의를 기울이지 않으면

poiemaweb.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.