Execution Context
🧠 এক্সিকিউশন কনটেক্সট কী?
জাভাস্ক্রিপ্ট ইনজিন যখন কোনো স্ক্রিপ্ট ফাইল স্কেন করে, তখন এটি কোড রূপান্তর এবং এক্সিকিউশনের জন্য যে ইনভায়রনমেন্ট তৈরি করে তাকে এক্সিকিউশন কনটেক্সট বলে।
দুই ধরনের এক্সিকিউশন কনটেক্সট আছে: গ্লোবাল এবং ফাংশন।
- গ্লোবাল এক্সিকিউশন কনটেক্সট তৈরি হয় যখন জাভাস্ক্রিপ্ট স্কিপ্ট প্রথম রান করা শুরু করে, এবং এটি জাভাস্ক্রিপ্ট এর গ্লোবাল স্কোপ রিপ্রেজেন্ট করে থাকে।
- ফাংশন কনটেক্সট তৈরি হয় যখন কোনো ফাংশন কল করা হয়। এটি ফাংশনের লোকাল স্কোপ, স্পেসিফিকভাবে বললে ফাংশন স্কোপ রিপ্রেজেন্ট করে।
♻️ এক্সিকিউশন পেইজ :
একদম ছোট করে বললে কনটেক্সট এর রানটাইমে পার্সার সোর্স কোড পার্স করে এবং মেমোরিতে ভ্যারিয়েবল ও ফাংশন এর জন্য জায়গায় বরাদ্দ করে। এরপর সোর্স কোড জেনেরট ও এক্সিকিউট হয়।
জাভাস্ক্রিপ্টের এক্সিকিউশন কনটেক্সটে দুই ধরনের পেইজ সংগঠিত হয়। এগুলো হলো:
১. ক্রিয়েশন পেইজ
এই পেইজে জাভাস্ক্রিপ্ট ইনজিন এক্সিকিউশন কনটেক্সট তৈরি করে স্ক্রিপ্টের ইনভায়রনমেন্ট সেট করে। এটি নির্ধারণ করে:
- ভ্যারিয়েবল এর ভ্যালু ও ফাংশনের ডেফিনিশন
- এক্সিকিউশন কনটেক্সটের স্কোপ চেইন চিহ্নিত করে
চল উদাহরণসহ বোঝা যাক:
var n = 5;
function sqaure(n) {
var result = n * n;
return result;
}
var sqaure1 = sqaure(n);
var sqaure2 = sqaure(8);
console.log(sqaure1);
console.log(sqaure2)
সর্বপ্রথম জাভাস্ক্রিপ্ট ইনজিন সম্পর্ণ সোর্স কোড পড়ে, গ্লোবাল এক্সিকিউশন কনটেক্সট তৈরি করে এবং পরবর্তীতে নিচের ধাপগুলো ফলো করে
- গ্লোবাল অবজেক্ট তৈরি করে ব্রাউজারে যেটা কিনা
window
এবংnode.js
এ গ্লোবাল - ভেরিএভল ও ফাংশনের জন্য মেমোরিতে জায়গা সেট করে
- ভ্যারিএভলগুলো
undefined
ও ফাংশন রেফারেন্স/ডেফিনিশন হিসেবে জমা করে
এটাকেই বলে ক্রিয়শন পেজ। কল্পনা করার জন্য কিছু ডায়াগ্রাম নিচে দেওয়া হলো

এরপর আসে—
২. এক্সিকিউশন পেইজ
এই পেইজে ইনজিন কোডের উপর থেকে নিচে যাওয়া শুরু করে:
var n = 5;
function sqaure(n) {
var result = n * n;
return result;
}
var sqaure1 = sqaure(n);
var sqaure2 = sqaure(8);
console.log(sqaure1);
console.log(sqaure2);
- যখনই এটা
n = 5
ইনকাউন্টার করে, এটা মেমোরির n জায়গাতে 5 বসিয়ে দেয়। এতক্ষণ পর্যন্ত যা কিনা ডিফল্টভাবেundefined
ছিলো। - এরপর এটা যায়
square
ফাংশন এর কাছে। যেহেতু ফাংশন এর জন্য মেমোরিতে অলরেডি জায়গা বরাদ্দ করা আছে, এটা ডাইরেক্টলি জাম্প করেvar square1 = square(n);
এই লাইনে। এতেsquare()
কল হবে এবং জাভাস্ক্রিপ্ট আবার ও একটি নতুন ফাংশন এক্সিকিউশন কনটেক্সট তৈরি করবে। - সব হিসাব শেষ হওয়ার পর এটি স্কয়ার এর ভ্যালু(আর্গুমেন্ট)
result
এ এসাইন করবে যেটা কিনা পুর্বেundefined
ছিলো। ফাংশন ভ্যালু রিটার্ন করবে এবং ফাংশন এক্সিকিউশন কনটেক্সট টা ধ্বংস হয়ে যাবে। square()
ফাংশন থেকে রিটার্ন হওয়া ভ্যালুsquare1
এ অ্যাসাইন করা হবে। একই জিনিসsquare2
এর ক্ষেত্রেও ঘটবে। কোডের সম্পূর্ণ execution শেষ হলে, গ্লোবাল কনটেক্সট এরকম দেখাবে এবং এরপর এটাও ধ্বংস (destroy) হয়ে যাবে।
শেষ কথা : JavaScript-এর execution context বোঝা খুবই গুরুত্বপূর্ণ, কারণ এটা ব্যাখ্যা করে যে JavaScript-এর কোড পর্দার আড়ালে কিভাবে কাজ করে। এটি নির্ধারণ করে কোন পরিবেশে কোড রান হবে এবং কোন ভেরিয়েবল ও ফাংশনগুলো ব্যবহারযোগ্য থাকবে।