diff options
Diffstat (limited to 'files/ru/glossary/call_stack/index.html')
-rw-r--r-- | files/ru/glossary/call_stack/index.html | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/files/ru/glossary/call_stack/index.html b/files/ru/glossary/call_stack/index.html new file mode 100644 index 0000000000..04eb95fdb5 --- /dev/null +++ b/files/ru/glossary/call_stack/index.html @@ -0,0 +1,102 @@ +--- +title: Call stack +slug: Словарь/Call_stack +tags: + - Glossary +translation_of: Glossary/Call_stack +--- +<p><strong>Стек вызовов(call stack) </strong>- это механизм для интерпретаторов (таких как интерпретатор JavaScript в веб-браузере) для отслеживания текущего местонахождения интерпретатора в скрипте, который вызывает несколько функций типа {{glossary("function","functions")}}, — какая из функций выполняется на данный момент, какие функции вызываются изнутри этой (выполняемой) функции, какая будет вызвана следующей и т. д.</p> + +<ul> + <li>Когда скрипт вызывает функцию, интерпретатор добавляет ее в стек вызовов и потом начинает ее обработку.</li> + <li>Любые функции, вызванные этой функцией, добавляются в стек вызовов и выполняются, как только происходит их вызов. </li> + <li>Когда выполнение основной функции завершено, интрепретатор снимает ее со стека вызовов и возобновляет выполнение кода в списке основного кода с той точки, где остановился до этого.</li> + <li>Если стек занимает больше места, чем ему было присвоено, это приводит к ошибке переполнения стека ("stack overflow" error).</li> +</ul> + +<h2 id="Пример">Пример</h2> + +<p> </p> + +<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></li> + <li>Функция "greeting" помещается в очередь стека вызовов.</li> +</ol> + +<div class="note"> +<p>Очередь стека вызовов:<br> + - greeting</p> +</div> + +<p> </p> + +<ol start="4"> + <li>Выполняется код внутри функции `greeting`.</li> + <li>Вызывается функция <code>sayHi()</code>.</li> + <li>Функция <code>sayHi()</code> помещается в очередь стека вызовов.</li> +</ol> + +<div class="note"> +<p>Очередь стека вызовов:<br> + - greeting<br> + - sayHi</p> +</div> + +<ol start="7"> + <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 с места вызова функции <code>greeting()</code>.</li> + <li>Выполненная функция <code>greeting()</code> удаляется из очереди стека вызовов.<br> + + <div class="note"> + <p>Очередь стека вызовов:<br> + ПУСТО</p> + </div> + </li> +</ol> + +<p>Выполнение кода началось с пустого стека вызовов, и всякий раз, когда мы вызывали функцию, она автоматически добавлялась в очередь стека вызовов, после выполнения всего своего кода она автоматически удалялась из очереди стека вызовов. И в конце выполнение кода также завершилось с пустым стеком вызовов.</p> + +<h2 id="Узнать_больше">Узнать больше</h2> + +<h3 id="Общие_знания">Общие знания</h3> + +<ul> + <li>{{Interwiki("wikipedia", "Call stack")}} на Википедии</li> +</ul> + +<section id="Quick_Links"> +<ul> + <li><a href="/ru/docs/Glossary">MDN Web Docs Glossary</a> + + <ul> + <li>{{Glossary("Call stack")}}</li> + <li>{{Glossary("Function")}}</li> + </ul> + </li> +</ul> +</section> |