Junior
Ինչպես է աշխատում ստեքը JavaScript-ում?
sobes.tech AI
Պատասխան AI-ից
Զանգի բլոկ (Call Stack) տվյալների կառուցվածք է, որը հետևում է ֆունկցիաների կատարմանը: Երբ ֆունկցիա է կանչվում, այն տեղադրվում է բլոկի վերևում: Երբ ֆունկցիան ավարտվում է, այն հեռացվում է բլոկից: JavaScript-ը միակ թելային է, ուստի ունի միայն մեկ կանչի բլոկ:
Հիմնական գործողություններ՝
- Push՝ Ֆունկցիա ավելացնել բլոկի վերևում:
- Pop՝ Ֆունկցիա հեռացնել բլոկից:
Օրինակ՝
// A ֆունկցիան կանչում է B ֆունկցիան
function A() {
B(); // B տեղադրվում է բլոկում
console.log('A ավարտվեց'); // Երբ B ավարտվի, A-ն շարունակվում է
}
// B ֆունկցիան կանչում է C ֆունկցիան
function B() {
C(); // C տեղադրվում է բլոկում
console.log('B ավարտվեց'); // Երբ C ավարտվի, B-ն շարունակվում է
}
// C ֆունկցիան պարզապես տպում է կոնսոլում
function C() {
console.log('C ավարտվեց'); // C ավարտվում է, հեռացվում բլոկից
}
A(); // Կոչ A. A տեղադրվում է բլոկում
// Բլոկ: [A] -> [A, B] -> [A, B, C] -> [A, B] -> [A] -> []
Բլոկի հետևում՝
| Գործողություն | Բլոկ |
|---|---|
A() կանչվում է |
[A] |
B() կանչվում է |
[A, B] |
C() կանչվում է |
[A, B, C] |
C() ավարտվում է |
[A, B] |
B() ավարտվում է |
[A] |
A() ավարտվում է |
[] |
Stack Overflow սխալները տեղի են ունենում, երբ բլոկը շատ մեծ թվով կանչումների պատճառով լցվում է (օրինակ՝ անսահման ռեկուրսիայի դեպքում) և չի կարող ավելացնել նոր ֆունկցիաներ։