[TIL]CS: var,let TDZ 그리고 호이스팅?

grace·2023년 3월 10일
0

TIL/WIL

목록 보기
31/37
post-thumbnail

🤓 What I Learned Today

JavaScript에서 호이스팅(hoisting)이란 인터프리터가 변수와 함수의 메모리 공간 선언 전에 할당하는 것을 의미한다.

좀 더 쉽게 말하자면 자바스크립트에서 물 흐르는 것처럼 위에서 아래로 실행되는데 호이스팅이란 미리 선언한 변수와 함수를 쭉 읽으며 가져가서 메모리에 기억을 해둔다. 즉, 함수가 실행되기 전에 안에 있는 변수들을 범위의 최 상단으로 끌어올리는 것이다.

var

호이스팅시 변수의 선언과 초기화(undefinded) 같이 시키고 값 할당은 나중에 그 줄 가서 할당을 한다.

console.log(a) //undefinded
var a = 1
console.log(a)//1

전역변수(블락 밖에서 선선을 한 어디든 쓰일 수 있는 변수)와 지역변수(블락 안에서 선언된 변수, 블락 안에서만 쓸 수 있음)의 개념이 확실치 않고 함수만 지역변수로 호이스팅이 되고 나머지는 다 전역변수로 올려버린다. 변수의 이름이 중복이 된다.

let

let 도 호이스팅이 된다. 다만, let 의 변수는 TDZ(Temporal Death Zone)라는 일시적으로 죽은 범위의 개념을 만들어서 #선언문이 나오기 전까지 #에 접근할수 없도록 했다.


  • 인터프리터? interpret 라는 단어는 해석하다라는 뜻으로 프로그램에서의 뜻은 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경
    • 단점으로는

      • 컴파일러와 다르게 한번에 한 문장씩 읽고 번역하여 실행시키는 과정을 반복하다보니 실행이 느리다.
      • 한번에 한 문장씩 읽기때문에 프로그램을 실행해봐야지만 오류 발견이 가능
    • 장점으로는
      - 메모리 효율이 좋다.
      - 코드 변경시 빌드 과정없이 바로 실행이 가능

      대표적인 언어에는 Python, R, Ruby

  • 컴파일? compile 단어의 자체 뜻은 모아서 묶음으로 만든다고 하는데 프로그램에서의 단어의 뜻은 프로그램 전체를 스캔하여 이를 모두 ~ 기계어로 번역한다는 뜻이 있다.

    • 단점으로는
      • 1.프로그램을 실해하는데 필요한 모든 파일을 스캔하기 때문에 초기 스캔 시간이 오래걸린다.
      1. 컴파일러는 기계어로 번역시 오브젝트 코드 라는 파일을 만드는데 이 오브젝트 코드를 다시 묶어서 하나의 실행 파일로 만드는 링킹 작업을 한다. 이 과정에서 메모리를 많이 사용
    • 장점으로는
      • 1.초기 스캔은 오래 걸리지만 한번 스캔하면 실행 파일을 만들어 놓고 계속 사용하기 때문에 실행 속도는 인터프리터보다 빠르다.
      1. 컴파일러는 오류 메세지를 생성할때 전체 코드를 검사한 후 오류 메시지를 생성하는데 프로그램 실행 전에 오류 발견이 가능하다.

    컴파일러(Comiler)를 사용하는 대표적인 언어에는 C, C++, C#, CLEO, COBOL 등 있고 게 컴파일러를 사용하여 실행하는 언어를 컴파일러형 언어(Compiled Language) 라고 한다!


*변수?데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간

profile
미래의 개발자!

0개의 댓글