본문 바로가기

자바스크립트

JS 인터프리터 언어와, 호이스팅

인터프리터언어

-JS,C를 고급언어, 컴파일언어라고 한다. 기계가 이해하는 0,1이 아닌 인간이 이해하기 쉬운 자연어와 비슷한 구조를 갖는 언어를 말한다. 고급 언어를 사용하면 기계어로 번역하는 과정을 거쳐야 하는데 번역기의 종류는 컴파일러인터프리터가 존재한다.

 

컴파일언어는 : Compiled language라고 한다. 대표 c언어.  프로그램 전체를 목적 프로그램으로 번역한후 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생성한다. 프로그램 전체를 한번에  쭉 번영한 후 실행 프로그램을 따로 생성한다. 번역 속도는 느리지만 한번 번역을 끝낸 후에는 생성된 실행 프로그램만 실행하면 되니깐 다시 번역할 필요가 없어 실행 속도는 빠르다

 

인터프리터:  프로그램을 한줄 단위로 받아들여 번역하고 번역과 동시에 프로그램을 한줄 단위로 즉시 실행한다. 목적 프로그램이 따로 생성되지는 않는다. 줄 단위로 실행하기 때문에 번역 속도도 빨라진다. 프로그램을 매번 실행할때마다 번역을 해야하기 때문에 실행 속도는 느려지고 cpu 사용 시간의 낭비가 커진다. 

 

 

호이스팅:  한 줄 단위로 번역과 동시에 실행이 이루어지는 js도 약간의 전치리 과정을 거칠때가 있는데 그때가 호이스팅이다. 호이스팅은 변수의 선언을 그 변수가 스코프 내에서 가장 최상단으로 끌어올린다라는 뜻이다. 

console.log(a) //undefined    --->호이스ㅡ팅이 있어서 에러가 나지 않고 undefined된다. 변수의 선언이 호이스팅되어 최상단 으로 끌어올려지기 때문에.

var a = 1;

console.log(a)//1 

 

-js로 작성한 프로그램을 실행시키면 약간의 전처리 과정을  스캐닝 이라고 한다.

-스캐닝 과정이 끝나고 다시 위에서부터 한 줄씩 차례로 코드를 실행시키는 것을 런타임 과정이라고 한다.

 

1. 1차 스캐닝 과정에서 전역 변수 a,d 선언, b함수가 메모리에 등록된다. (a,d 할당되지 않아 undefined, b는 함수로 인지되어 등록됨)

2.1차 스캐닝후 위에서부터 차례대로 코드를 읽는다(런타임과정)

3.스캐닝 과정에서 a의 선언이 등록되었으나 a의 값은 할돵되지 않으므로 undefined

4. var a = 10 할당

5.함수 b가 호출됨

6. b 함수 스코프 내에서 다시 스캐닝 과정. 변수 a,c의 선언을 메모리에 등록한다.

7.스캐닝 후 다시 b스코프의 첫번째줄부터 읽으며 런타임과정을 갖는다.

8.var a =20으로 할당 되어서 console.log(20) 출력

9.c는 스캐닝때 등록이 되었기때문에 undefined 할당은 되지 않았고

10. var c= 30'; console.log(30)

11. b함수 스코프 내에서 변수 d가 존재하지 않기 때문에 부모 스코프에서 변수 d를 찾는다. 아까 d변수의 선언이 1차 스캐닝때 등록되었으므로 undefined

12.함수 호출 종료후 console.log(10)출력. b함수 스코프 내의 a변수는 b함수 스코프내에서만 접근 할 수 있기 때문에 영향을 받지않는다.

 

함수 선언식

function foo() {} 호이스팅되기 때문에 스코프 어디서든 호출 가능

foo();

function foo(){

  console.log('vcv")} 

 

함수 표현식

var bar = function () {}

함수의 이름이 변수처럼 선언되고 함수가 작성되는 방식.

변수의 호이스팅처럼 변수의 선언만 undefined인 상태로 최상단으로 끌어올려진다.

bar 함수를 할당하지 않으면 bar is not a function이 된다.