blob: cfb48752507344f40c70ab00f1eddf78b2e7bdf7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
---
title: Call stack (コールスタック)
slug: Glossary/Call_stack
tags:
- CodingScripting
- Glossary
- JavaScript
- コールスタック
- 用語集
translation_of: Glossary/Call_stack
---
<p><ruby><strong>コールスタック</strong><rp> (</rp><rt>call stack</rt><rp>) </rp></ruby>は、インタープリター (ウェブブラウザー内の JavaScript インタープリターなど) の仕組みの一つで、複数階層の{{glossary("function","関数")}}を呼び出したスクリプト内の位置を追跡し続けることです。 — どの関数が現在実行されているのか、その関数の中でどの関数が呼び出されたか、などです。</p>
<ul>
<li>スクリプトが関数を呼び出すとき、インタープリターはそれをコールスタックに追加し、それから関数の実行を始めます。</li>
<li>その関数から呼び出されたどの関数も、コールスタックのその上に追加され、呼び出し先を実行します。</li>
<li>現在の関数が終了すると、インタープリターはスタックからそれを外し、最後のコードがリストされている場所から実行を再開します。</li>
<li>スタックが割り当てられている量よりも多くのスペースを使用した場合、 "stack overflow" エラーとなります。</li>
</ul>
<h2 id="Example" name="Example">例</h2>
<pre class="brush: js">function greeting() {
// [1] Some codes here
sayHi();
// [2] Some codes here
}
function sayHi() {
return "Hi!";
}
// Invoke the `greeting` function
greeting();
// [3] Some codes 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" name="Learn_more">より詳しく知る</h2>
<h3 id="General_knowledge" name="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>
|