Call Stack
What is Call Stack?
জাভাস্ক্রিপ্ট ইনজিন Call Stack ব্যবহার করে গ্লোবাল ও ফাংশনাল কনটেক্সট ট্র্যাক রাখার জন্য। এটি LIFO (Last In First Out) প্রিন্সিপল ফলো করে।
- স্ক্রিপ্ট এক্সিকিশনে ইনজিন প্রথমে যখন স্টার্ট হয়, তখন এটি একটি গ্লোবাল কনটেক্সট তৈরি করে এবং কলস্টেকে পুস করে দেয়
- এরপর প্রতিটি ফাংশন কলে,
JS
ইনজিন ফাংশন এক্সিকিউশন কনটেক্স তৈরি করে এবং কলস্টেকে একদম উপরে পুস করে কোড এক্সিকিউশন শুরু করে দেয়। - এক্সিকিউশন এর সময় যখনই কারেন্ট ফাংশন কমপ্লিট হয়, তখন জেএস ইনজিন অটোমেটিক্যালি ওই কনটেক্সট কলস্টেক থেকে সরিয়ে দেয় এবং পেরেন্টে এ ফিরে যায় (মানে যেখান থেকে ফাংশনকে কল করা হয়েছিল)।
🧪 উদাহরণ:
function funcA(m, n) {
return m * n;
}
function funcB(m, n) {
return funcA(m, n);
}
function getResult(num1, num2) {
return funcB(num1, num2);
}
var res = getResult(5, 6);
console.log(res); // 30
- প্রথমে এটি
funcA
,funcB
,getResult
ফাংশন এবংres
ভেরিয়েবলের জন্য মেমোরি বরাদ্দ করে। এরপর এটিgetResult()
ফাংশনটি কল করে, যা কল স্ট্যাকে পুশ করা হয়। getResult()
ফাংশনটিfuncB()
-কে কল করে। এই মুহূর্তে,funcB
-এর এক্সিকিউশন কনটেক্সট কল স্ট্যাকে টপে সংরক্ষিত হয়। এরপর এটি এক্সিকিউশন শুরু করে এবংfuncA()
ফাংশনটি কল করে। একইভাবে,funcA
-এর কনটেক্সট স্ট্যাকে পুশ করা হয়।- প্রতিটি ফাংশনের এক্সিকিউশন শেষ হলে, সেগুলো কল স্ট্যাক থেকে রিমুভ করা হয়।
নিচের ছবি পুরো এক্সিকিউশন প্রসেসটি দেখায়:
⚠️ Stack Overflow সমস্যা
Call Stack-এর একটি নির্দিষ্ট সীমা থাকে। যদি কোনো ফাংশন বারবার নিজেকে কল করতে থাকে আর থামার শর্ত না থাকে, তাহলে Stack Overflow ঘটে।
❗ উদাহরণ:
function display() {
display(); // থামার শর্ত নেই
}
display();
Error:
C:\Users\rwiteshbera\Desktop\Javascript\n.js:2
display();
^
RangeError: Maximum call stack size exceeded
Last updated on