본문 바로가기

자바스크립트 작동 방법

by mtoc 2019. 10. 14.

Execution Contexts and Execution Stack

자바스크립트 엔진이 코드를 실행할 때 일어나는 일

1. parser에 의해 코드가 parse 됨.

문법 체크, 코드가 유효한지 검사

맞으면 신택스 트리 만듦

2. 머신 코드로 변환

3. 코드가 실행됨


글로벌 실행 문맥은 어떤 함수 안에도 있지 않는 것

기본적으로 window object이므로

window.name이나 name 이나 전역 변수면 똑같은 거다


함수는

global execution context

-> first()

-> second() (first 안에서 실행되는 함수)

-> third() (second 안에서 실행되는 함수)

순으로 쌓이며 실행되는 순서는 스택과 같다(pop)

즉 third, second, first 순으로 실행됨


Creation and Execution Phases and Hoisting

실행 문맥 오브젝트

Variable Object: 함수 인자를 포함

Scope chain

"This" variable


1. 생성 단계

변수 오브젝트 생성

스코프 체인 생성

this 변수의 값 결정

2. 실행 단계

줄 단위로 코드 실행


모든 함수는 변수 오브젝트한테 저장된다

이것들이 실행 단계가 시작되기 전에 이미 사용가능한 것을 hoisted라고 함

: 변수 선언X 함수 선언에서만 작동함


var val = function() {}... X

function func() {}...O


실행 문맥은 코드가 실행되기도 전에 중요한 데이터들을 다 담고 있다


var age = 23

function foo() {

var age = 65

console.log(age)

}

foo() // 65 >> foo funciton의 excution context object!!

console.log(age) // 23 >> global execution context object


Scoping in javascript

특정 변수에 접근할 수 있는 곳
함수들은 각 스코프를 만든다

Lexical scoping: 부모 함수에도 접근


Global scope

first() scope: local scope

second() scope

second->first->global을 scope chain이라 부른다

거꾸로 접근하는 것은 불가능(예: global이 second로)


실행 스택과 스코프 체인은 다르다


댓글