--- title: Call stack (コールスタック) slug: Glossary/Call_stack tags: - Call Stack - CodingScripting - Glossary - JavaScript - コールスタック - 用語集 translation_of: Glossary/Call_stack --- <p><strong>コールスタック</strong> (call stack) は、インタープリター (ウェブブラウザー内の JavaScript インタープリターなど) の仕組みの一つで、複数階層の{{glossary("function","関数")}}を呼び出したスクリプト内の位置を追跡し続けることです。 — どの関数が現在実行されているのか、その関数の中でどの関数が呼び出されたか、などです。</p> <ul> <li>スクリプトが関数を呼び出すとき、インタープリターはそれをコールスタックに追加し、それから関数の実行を始めます。</li> <li>その関数から呼び出されたどの関数も、コールスタックのその上に追加され、呼び出し先を実行します。</li> <li>現在の関数が終了すると、インタープリターはスタックからそれを外し、最後のコードがリストされている場所から実行を再開します。</li> <li>スタックが割り当てられている量よりも多くのスペースを使用した場合、 "stack overflow" エラーとなります。</li> </ul> <h2 id="Example">例</h2> <pre class="brush: js">function greeting() { // [1] Some code here sayHi(); // [2] Some code here } function sayHi() { return "Hi!"; } // Invoke the `greeting` function greeting(); // [3] Some code here </pre> <p>上記のコードは次のように実行されます。</p> <ol> <li><code>greeting()</code> 関数の呼び出しまで、すべての関数を無視する。</li> <li><code>greeting()</code> 関数をコールスタックリストに追加する。 <div class="note"> <p>コールスタックリスト:<br> - greeting</p> </div> </li> <li><code>greeting()</code> 関数の中にあるコードのすべての行を実行する。</li> <li><code>sayHi()</code> 関数の呼び出しまで移動する。</li> <li>コールスタックリストに <code>sayHi()</code> 関数を追加する。 <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> 関数をコールスタックリストから削除する。 <div class="note"> <p>コールスタックリスト:<br> - greeting</p> </div> </li> <li><code>greeting()</code> 関数の中のすべてを実行したら、これを呼び出した行に戻り、残りの JavaScript コードの実行を続ける。</li> <li><code>greeting()</code> 関数をコールスタックリストから削除する。 <div class="note"> <p>コールスタックリスト:<br> 空</p> </div> </li> </ol> <p>空のコールスタックで始め、関数を呼び出す度に、自動的にそれがコールスタックに追加され、コードをすべて実行した後、自動的にコールスタックから削除されます。最後に、またからのスタックで終了します。</p> <h2 id="Learn_more">より詳しく知る</h2> <h3 id="General_knowledge">一般知識</h3> <ul> <li>ウィキペディアの{{Interwiki("wikipedia", "コールスタック")}}</li> </ul> <section id="Quick_links"> <ul> <li><a href="/ja/docs/Glossary">MDN Web Docs 用語集</a> <ul> <li>{{Glossary("Call stack", "コールスタック")}}</li> <li>{{Glossary("Function", "関数")}}</li> </ul> </li> </ul> </section>