diff options
Diffstat (limited to 'files/ko/glossary/call_stack/index.html')
-rw-r--r-- | files/ko/glossary/call_stack/index.html | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/files/ko/glossary/call_stack/index.html b/files/ko/glossary/call_stack/index.html new file mode 100644 index 0000000000..40ab2f4c99 --- /dev/null +++ b/files/ko/glossary/call_stack/index.html @@ -0,0 +1,84 @@ +--- +title: 호출 스택 +slug: Glossary/Call_stack +tags: + - Glossary + - JavaScript + - 호출 스택 +translation_of: Glossary/Call_stack +--- +<p><strong>호출 스택</strong>은 여러 함수들({{glossary("function","functions")}})을 호출하는 스크립트에서 해당 위치를 추적하는 인터프리터 (웹 브라우저의 자바스크립트 인터프리터같은)를 위한 메커니즘입니다. 현재 어떤 함수가 동작하고있는 지, 그 함수 내에서 어떤 함수가 동작하는 지, 다음에 어떤 함수가 호출되어야하는 지 등을 제어합니다.</p> + +<ul> + <li>스크립트가 함수를 호출하면 인터프리터는 이를 호출 스택에 추가한 다음 함수를 수행하기 시작합니다.</li> + <li>해당 함수에 의해 호출되는 모든 함수는 호출 스택에 추가되고 호출이 도달하는 위치에서 실행합니다.</li> + <li>메인 함수가 끝나면 인터프리터는 스택을 제거하고 메인 코드 목록에서 중단된 실행을 다시 시작합니다.</li> + <li>스택이 할당된 공간보다 많은 공간을 차지하면 "stack overflow" 에러가 발생합니다.</li> +</ul> + +<h2 id="예제">예제</h2> + +<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">greeting</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span> + <span class="comment token">// [1] Some codes here</span> + <span class="function token">sayHi</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + <span class="comment token">// [2] Some codes here</span> +<span class="punctuation token">}</span> +<span class="keyword token">function</span> <span class="function token">sayHi</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span> + <span class="keyword token">return</span> <span class="string token">"Hi!"</span><span class="punctuation token">;</span> +<span class="punctuation token">}</span> + +<span class="comment token">// Invoke the `greeting` function</span> +<span class="function token">greeting</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + +<span class="comment token">// [3] Some codes here</span></code></pre> + +<p>위 코드는 다음과 같이 실행될 것입니다.</p> + +<ol> + <li><code>greeting()</code> 함수에 도달할 때까지, 모든 함수를 무시합니다.</li> + <li><code>greeting()</code> 함수를 호출합니다.</li> + <li><code>greeting()</code> 함수를 호출 스택 리스트에 추가합니다.<br> + + <div class="note"> + <p>호출 스택 리스트:<br> + - greeting</p> + </div> + </li> + <li>`greeting` 함수 내부의 모든 코드를 실행합니다.</li> + <li><code>sayHi()</code> 함수를 얻습니다.</li> + <li><code>sayHi()</code> 함수를 호출 스택 리스트에 추가합니다.<br> + + <div class="note"> + <p>호출 스택 리스트:<br> + - greeting<br> + - sayHi</p> + </div> + </li> + <li><code>sayHi()</code> 함수의 끝에 도달할 때까지, 함수 내부의 모든 코드를 실행합니다.</li> + <li><code>sayHi()</code> 가 호출된 라인으로 돌아와 <code>greeting()</code> 함수의 나머지를 계속 실행합니다.</li> + <li>호출 스택 리스트에서 <code>sayHi()</code> 함수를 제거합니다.<br> + + <div class="note"> + <p>호출 스택 리스트:<br> + - greeting</p> + </div> + </li> + <li><code>greeting()</code> 함수 내부의 모든 코드가 실행되었을 때, 이를 호출한 라인으로 돌아와 JS 코드의 나머지를 계속 실행합니다.</li> + <li>호출 스택 리스트에서 <code>greeting()</code> 함수를 제거합니다.<br> + + <div class="note"> + <p>호출 스택 리스트:<br> + EMPTY</p> + </div> + </li> +</ol> + +<p>우리는 빈 호출 스택으로 시작하며, 함수를 호출할 때마다 자동으로 호출 스택에 추가되고, 해당 코드가 모두 실행된 후, 호출 스택에서 자동으로 제거됩니다. 결국, 마찬가지로 빈 호출 스택으로 끝납니다.</p> + +<h2 id="더_알아보기">더 알아보기</h2> + +<h3 id="일반_지식">일반 지식</h3> + +<ul> + <li>{{Interwiki("wikipedia", "Call stack")}} on Wikipedia</li> +</ul> |