1.2 호출스택

박창진·2022년 3월 28일
0

스택

function c() {
	console.log('c');
}

function a() {
	console.log('a');
    function b() {
    	console.log('b');
        c();
    }
    b();
}

a();

어떤 순서로 돌아가는지 알아야되!
결과: a, b, c

코드는 위에서 아래로 보통 실행이 된다.
자바스크립트는 이러한 형태인 stack 형태로 실행이 된다. 스택은 기본적으로 LIFO의 성질을 가진다.

용어정리

LIFO: Last Info First Out의미로 마지막에 들어온게 제일 먼저 나가고, 처음 들어온게 제일 마지막에 나간다는 말이다. 명함이라고 생각하자. 명함은 우리가 밑에서 부터 차곡차곡 쌓아두고 위에부터 뺀다.
반대 개념인 Queu도 있다. 큐는 FIFO 형태이다

자세히 이해해 보자

function c() {
	console.log('c');
}

function a() {
	console.log('a');
    function b() {
    	console.log('b');
        c();
    }
    b();
}

a();

1. 호출 할때만 호출스택에 쌓이는 것이다.
2. a가 먼저 호출이되서 a호출 스택이 쌓인다 => console.log('a')가 호출되어 log 호출이 쌓이고, 해당 함수로 가서 함수를
실행한다. 실행이 끝나면 log함수는 사라진다 => b호출 스택이 쌓인다. => console.log('b')가 호출되고 호출이 쌓인뒤 실행후
지워지다. => c호출이 쌓이고 console.log('c')가 호출되고 쌓인후, 실행후 사라진다 => c의 함수가 '}'를 만나면 함수가 끝
난 것이므로 c가 사라진다 => b도 '}'후 사라진다 => a도 코드 실행후 사라진다.

'debugger'을 사용하면 stack 호출을 확인 할 수 있다.
debugger를 만나면 개발자 도구에서 소스 창으로 넘어가 stack을 확인 할 수 있다.

정리

  1. 호출스택은 함수가 호출 될 때만 stack형식으로 쌓인다.
  2. stack은 LIFO 성질을 가진다.
  3. 함수가 호출되면 해당 함수로 달려가고, 해당 함수에서 '}'을 만나면 stack에서 지워진다.
  4. "debugger"를 함수에 쓰면, 개발자 도구에서 호출스택을 확인 할 수 있다.
profile
I'm SpearJin

0개의 댓글