자바스크립트 콜스택(call stack)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function four(){
 console.log("four function execute");
}
 
function three(){
    four();
}
 
function two(){
  three();
}
 
function one(){
  two();  
}
 
one();
cs



다음과 같이 javascript에

one() 이라는 함수를 실행하면 two()를 부르고 

two()는 three()를 부르고, three()는 four()를 불러서 

console.log("four function execute")를 찍는다.


자바스크립트는 함수를 스택 위에 올리고 



 

 

 

 four() 

 

 

 three() 

 three() 

 

 two()

 two()

 two()

 one()

 one()

 one()

 one()



함수를 다 실행하면 하나씩 pop하면서 제거한다.



 four()

 

 

 

 three() 

 three() 

 


 two()

 two()

 two()


 one()

 one()

 one()

 one()


스택을 다 처리하면 실행시킬 것이 없는 거다.

실행이 완료되면 함수는 리스트에서 사라진다.




만약 스택에 올라가있는 함수에 

다음과 같은 throw 에러문이 있다면


1
throw Error("i am an error");
cs


에러 전에 있던 있던 모든 콜스택을 알려준다.





또한 스택에 함수를 계속 호출한다면 스택에 계속 쌓이게 되고 

스택의 사이즈는 한계가 있으므로 다음과 같은 오류가 발생한다.






1. callstack.html


1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
  <title>js 콜스택 테스트</title>
  <meta charset="utf-8" />
</head>
<body>
  <script type="text/javascript" src="callstack.js"></script>
  <h1>Hello</h1>
  <div>
  </div>
</body>
</html>
cs



2. callstack.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function four(){
 console.log("four function execute");
}
 
function three(){
    four();
}
 
function two(){
  three();
}
 
function one(){
  two();  
}
 
one();
cs



3. 실행결과 및 동작원리






자바스크립트는 함수를 스택 위에 올리고 함수가 실행되고 끝이 나면 pop하여 없애는 것을 확인할 수 있었다.



+ Recent posts