Skip to Content

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-এর কনটেক্সট স্ট্যাকে পুশ করা হয়।
  • প্রতিটি ফাংশনের এক্সিকিউশন শেষ হলে, সেগুলো কল স্ট্যাক থেকে রিমুভ করা হয়।

নিচের ছবি পুরো এক্সিকিউশন প্রসেসটি দেখায়:

wefa.png


⚠️ 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