SCOPE IN JAVASCRIPT
সেদিন আমি জাভাস্ক্রিপ্টে দুইটা সংখ্যা যোগ করার function কিভাবে তৈরি করে সেটা শিখতেছিলাম। প্রথমে addTwoNumber নাম একটা function define করলাম যেটা ২ টা সংখ্যা a,b parameters হিসেবে নিবে। তারপর sum নামে একটা variable declare করে তাতে a + b (২টার যোগফল) store করলাম। এরপর আমি খুশির ঠেলায় function এর বাইরে যেয়ে console.log(sum) লিখলাম।
এ কি! ReferenceError: sum is not defined…
এরকম situation এ আমার মত আপনিও হয়তো পড়েছেন। এরকম error খাওয়ার প্রধান কারণ scope সম্পর্কে ধারণা না থাকা । তাহলে আজকে ছোট করে এই JavaScript scope নিয়েই জানা যাক।
JavaScript এ scope হচ্ছে একটি নীতি বা policy যা variable এর availability manage করে । অর্থ্যাৎ কোন জায়গায় কোন variable access করা যাবে এবং কোন জায়গায় কোন variable access করা যাবে না সেটা scope নির্ধারণ করে। code block ({}curly braces এর ভিতরের code) এবং function দ্বারা জাভাস্ক্রিপ্ট এ scope তৈরি হয়। কোনো scope এর মধ্যে define করা variable শুধুমাত্র ঐ scope এর ভিতরেই access করা যাবে কিন্তু ঐ scope এর বাইরে access করা যাবে না।
কিছু to the point:
i ) child function তার parent function এর variables গুলিকে অ্যাক্সেস করতে পারবে।
ii ) তবে parent function তার child function এর variables গুলিকে অ্যাক্সেস করতে পারবে না। Eg.
function parentFunc () { var x = 10; function childFunc() { var y = 20; console.log(`${x } from childFunc()`)
// can access parentFunc variables } childFunc() console.log(`${y} from parentFunc ()`);
// cannot be accessed childFunc vars}
এখন আমরা window অথবা global scope এ var দিয়ে একটি variable declare এবং value assign করি। এরপর myFunc() নামে একটি function define করে এর ভিতর একই নামে(global scope এ define করা variable এর নামে ) আরেকটি var দিয়ে variable declare করে তাতে different value assign করি । এতে করে myFunc এর parent function(global) এর variable এবং এর value তে কোনো affect করেবে না। এটি কেবল তার scope এ বিদ্যমান রয়েছে
var x = 20;function myFunc() { var x = 10; var y = 9; console.log(`${x} from myFunc()`);}myFunc(); // 10 from myFunc()console.log(x); // 20 (doesnot affect it’s childFunc var)console.log(y); // cannot be accessed child function var
এখানে var দিয়ে global variable declare করা হয়ছে বলে আমরা একই নামে ঐ variable কে redeclare and reassign করতে পেরেছি । let বা const দ্বারা declare korle নিশ্চিত error খেয়ে যেতাম । কেন error খেতাম সেটা না হয় পরবর্তী কোন article এ জানব।