Call stack
СÑек вÑзовов (call stack) - ÑÑо Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ Ð´Ð»Ñ Ð¸Ð½ÑеÑпÑеÑаÑоÑов (ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº инÑеÑпÑеÑаÑÐ¾Ñ JavaScript в веб-бÑаÑзеÑе) Ð´Ð»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑекÑÑего меÑÑÐ¾Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð½ÑеÑпÑеÑаÑоÑа в ÑкÑипÑе, коÑоÑÑй вÑзÑÐ²Ð°ÐµÑ Ð½ÐµÑколÑко ÑÑнкÑий, â ÐºÐ°ÐºÐ°Ñ Ð¸Ð· ÑÑнкÑий вÑполнÑеÑÑÑ Ð½Ð° даннÑй моменÑ, какие ÑÑнкÑии вÑзÑваÑÑÑÑ Ð¸Ð·Ð½ÑÑÑи ÑÑой (вÑполнÑемой) ÑÑнкÑии, ÐºÐ°ÐºÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²Ñзвана ÑледÑÑÑей и Ñ. д.
- Ðогда ÑкÑÐ¸Ð¿Ñ Ð²ÑзÑÐ²Ð°ÐµÑ ÑÑнкÑиÑ, инÑеÑпÑеÑаÑÐ¾Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ ÐµÑ Ð² ÑÑек вÑзовов и поÑом наÑÐ¸Ð½Ð°ÐµÑ ÐµÑ Ð¾Ð±ÑабоÑкÑ.
- ÐÑбÑе ÑÑнкÑии, вÑзваннÑе ÑÑой ÑÑнкÑией, добавлÑÑÑÑÑ Ð² ÑÑек вÑзовов и вÑполнÑÑÑÑÑ, как ÑолÑко пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¸Ñ Ð²Ñзов.
- Ðогда вÑполнение оÑновной ÑÑнкÑии завеÑÑено, инÑеÑпÑеÑаÑÐ¾Ñ ÑÐ½Ð¸Ð¼Ð°ÐµÑ ÐµÑ Ñо ÑÑека вÑзовов и возобновлÑÐµÑ Ð²Ñполнение кода в ÑпиÑке оÑновного кода Ñ Ñой ÑоÑки, где оÑÑановилÑÑ Ð´Ð¾ ÑÑого.
- ÐÑли ÑÑек Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð±Ð¾Ð»ÑÑе меÑÑа, Ñем ÐµÐ¼Ñ Ð±Ñло пÑиÑвоено, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº оÑибке пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑека ("stack overflow" error).
ÐÑимеÑ
function greeting() {
// [1] Some code here
sayHi();
// [2] Some code here
}
function sayHi() {
return "Hi!";
}
// Invoke the `greeting` function
greeting();
// [3] Some code here
Ðод вÑÑе бÑÐ´ÐµÑ Ð²Ñполнен ÑледÑÑÑим обÑазом:
-
ÐгноÑиÑование вÑÐµÑ ÑÑнкÑий, пока не бÑÐ´ÐµÑ Ð´Ð¾ÑÑигнÑÑо меÑÑо вÑзова ÑÑнкÑии
greeting(). -
ÐÑзÑваеÑÑÑ ÑÑнкÑиÑ
greeting(). -
ФÑнкÑÐ¸Ñ "greeting" помеÑаеÑÑÑ Ð² оÑеÑÐµÐ´Ñ ÑÑека вÑзовов.
ÐÑимеÑание: ÐÑеÑÐµÐ´Ñ ÑÑека вÑзовов: - greeting
-
ÐÑполнÑеÑÑÑ ÐºÐ¾Ð´ внÑÑÑи ÑÑнкÑии
greeting. -
ÐÑзÑваеÑÑÑ ÑÑнкÑиÑ
sayHi(). -
ФÑнкÑиÑ
sayHi()помеÑаеÑÑÑ Ð² оÑеÑÐµÐ´Ñ ÑÑека вÑзовов.ÐÑимеÑание: ÐÑеÑÐµÐ´Ñ ÑÑека вÑзовов: - greeting - sayHi
-
ÐÑполнÑеÑÑÑ Ð²ÐµÑÑ ÐºÐ¾Ð´ внÑÑÑи ÑÑнкÑии
sayHi()до Ñамого конÑа. -
ÐозвÑÐ°Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° Ñ Ð¼ÐµÑÑа вÑзова ÑÑнкÑии
sayHi()и пÑодолжение вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾ÑÑавÑегоÑÑ ÐºÐ¾Ð´Ð° ÑÑнкÑииgreeting(). -
ÐÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð½Ð°Ñ ÑÑнкÑиÑ
sayHi()ÑдалÑеÑÑÑ Ð¸Ð· оÑеÑеди ÑÑека вÑзовов.ÐÑимеÑание: ÐÑеÑÐµÐ´Ñ ÑÑека вÑзовов: - greeting
-
Ðогда веÑÑ ÐºÐ¾Ð´ внÑÑÑи ÑÑнкÑии
greeting()вÑполнен, пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð²Ð¾Ð·Ð²ÑÐ°Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾ÑÑавÑейÑÑ ÑаÑÑи оÑновного ÑкÑипÑа JS Ñ Ð¼ÐµÑÑа вÑзова ÑÑнкÑииgreeting(). -
ÐÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð½Ð°Ñ ÑÑнкÑиÑ
greeting()ÑдалÑеÑÑÑ Ð¸Ð· оÑеÑеди ÑÑека вÑзовов.ÐÑимеÑание: ÐÑеÑÐµÐ´Ñ ÑÑека вÑзовов: ÐУСТÐ
ÐÑполнение кода наÑалоÑÑ Ñ Ð¿ÑÑÑого ÑÑека вÑзовов, и вÑÑкий Ñаз, когда Ð¼Ñ Ð²ÑзÑвали ÑÑнкÑиÑ, она авÑомаÑиÑеÑки добавлÑлаÑÑ Ð² оÑеÑÐµÐ´Ñ ÑÑека вÑзовов, поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ñего Ñвоего кода она авÑомаÑиÑеÑки ÑдалÑлаÑÑ Ð¸Ð· оÑеÑеди ÑÑека вÑзовов. Рв конÑе вÑполнение кода Ñакже завеÑÑилоÑÑ Ñ Ð¿ÑÑÑÑм ÑÑеком вÑзовов.